diff --git a/docs/cache-index-performance-optimized-results.json b/docs/cache-index-performance-optimized-results.json new file mode 100644 index 0000000..5f1c912 --- /dev/null +++ b/docs/cache-index-performance-optimized-results.json @@ -0,0 +1,108 @@ +{ + "measuredAt": "2026-11-02T11:05:58.163Z", + "scope": "Synthetic metadata-only scale probe. Dummy blob rows have no payload files; excludes directory scanning and disk reads for those rows. Real reads use one verified blob. Eviction probe uses real 64 KiB files.", + "node": "v24.14.1", + "cardinality": [ + { + "seedBlobs": 0, + "seedAliases": 0, + "seedDecisions": 0, + "seedHistory": 0, + "adminStats": { + "p50Ms": 0.32291899999972884, + "p95Ms": 0.47828900000013164, + "maxMs": 0.49711900000011155 + }, + "warmSourceHit": { + "p50Ms": 2.9400040000000445, + "p95Ms": 4.2662209999998595, + "maxMs": 4.463114000000132 + }, + "decisionWrite": { + "p50Ms": 0.4946559999998499, + "p95Ms": 0.900854999999865, + "maxMs": 16.506318000000192 + }, + "smallFill": { + "p50Ms": 43.615020000000186, + "p95Ms": 83.75168699999995, + "maxMs": 103.38539700000001 + } + }, + { + "seedBlobs": 10000, + "seedAliases": 20000, + "seedDecisions": 10000, + "seedHistory": 10000, + "adminStats": { + "p50Ms": 0.3126299999994444, + "p95Ms": 0.4548949999998513, + "maxMs": 0.6803079999999682 + }, + "warmSourceHit": { + "p50Ms": 2.6403629999995246, + "p95Ms": 14.954797000000326, + "maxMs": 19.31438099999923 + }, + "decisionWrite": { + "p50Ms": 0.4195850000005521, + "p95Ms": 0.5379259999999704, + "maxMs": 0.6729980000000069 + }, + "smallFill": { + "p50Ms": 39.785445999999865, + "p95Ms": 53.938020999999935, + "maxMs": 58.02874900000006 + } + }, + { + "seedBlobs": 100000, + "seedAliases": 200000, + "seedDecisions": 100000, + "seedHistory": 100000, + "adminStats": { + "p50Ms": 0.3238130000027013, + "p95Ms": 0.4950620000017807, + "maxMs": 0.649769000003289 + }, + "warmSourceHit": { + "p50Ms": 2.7466110000023036, + "p95Ms": 6.374782999999297, + "maxMs": 15.351889999998093 + }, + "decisionWrite": { + "p50Ms": 0.7600549999988289, + "p95Ms": 1.1067369999946095, + "maxMs": 1.1147449999989476 + }, + "smallFill": { + "p50Ms": 44.32314000000042, + "p95Ms": 68.3110549999983, + "maxMs": 91.21001899999828 + } + } + ], + "eviction": { + "requests": 300, + "distinctObjects": 100, + "upstreamFills": 300, + "hitRate": 0, + "elapsedMs": 13436.223987999998, + "p50Ms": 41.134181999994325, + "p95Ms": 57.91661600000225, + "peakAllocated": 3997696, + "final": { + "blobs": 60, + "originalBytes": 3932160, + "storedBytes": 3932160, + "allocatedBytes": 3932160, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 4194304, + "maxObjectBytes": 65536, + "oldestAccess": 1793617555801 + } + }, + "assertions": "passed" +} diff --git a/docs/cache-index-performance-results.json b/docs/cache-index-performance-results.json new file mode 100644 index 0000000..dc4277c --- /dev/null +++ b/docs/cache-index-performance-results.json @@ -0,0 +1,108 @@ +{ + "measuredAt": "2026-11-02T10:42:36.314Z", + "scope": "Synthetic metadata-only scale probe. Dummy blob rows have no payload files; excludes directory scanning and disk reads for those rows. Real reads use one verified blob. Eviction probe uses real 64 KiB files.", + "node": "v24.14.1", + "cardinality": [ + { + "seedBlobs": 0, + "seedAliases": 0, + "seedDecisions": 0, + "seedHistory": 0, + "adminStats": { + "p50Ms": 0.5495260000002418, + "p95Ms": 0.8194220000000314, + "maxMs": 0.8764419999997699 + }, + "warmSourceHit": { + "p50Ms": 22.106009000000086, + "p95Ms": 32.67359299999998, + "maxMs": 38.92065599999978 + }, + "decisionWrite": { + "p50Ms": 6.600801999999931, + "p95Ms": 12.472383000000264, + "maxMs": 15.8033989999999 + }, + "smallFill": { + "p50Ms": 71.12627699999939, + "p95Ms": 98.24754799999982, + "maxMs": 100.35789100000011 + } + }, + { + "seedBlobs": 10000, + "seedAliases": 20000, + "seedDecisions": 10000, + "seedHistory": 10000, + "adminStats": { + "p50Ms": 6.904306000000361, + "p95Ms": 9.677666999999929, + "maxMs": 12.638716999999815 + }, + "warmSourceHit": { + "p50Ms": 22.83701199999996, + "p95Ms": 47.79449499999828, + "maxMs": 102.36107600000014 + }, + "decisionWrite": { + "p50Ms": 8.062501999999768, + "p95Ms": 13.995523999999932, + "maxMs": 14.909832000001188 + }, + "smallFill": { + "p50Ms": 75.03789299999971, + "p95Ms": 117.16210499999943, + "maxMs": 143.80038499999955 + } + }, + { + "seedBlobs": 100000, + "seedAliases": 200000, + "seedDecisions": 100000, + "seedHistory": 100000, + "adminStats": { + "p50Ms": 66.83604900000137, + "p95Ms": 78.69937500000015, + "maxMs": 87.98320400000011 + }, + "warmSourceHit": { + "p50Ms": 26.310491000000184, + "p95Ms": 82.98941600000035, + "maxMs": 112.1549300000006 + }, + "decisionWrite": { + "p50Ms": 22.948387000000366, + "p95Ms": 45.47333599999911, + "maxMs": 56.50094800000079 + }, + "smallFill": { + "p50Ms": 136.3280279999999, + "p95Ms": 214.8330500000011, + "maxMs": 312.4176129999978 + } + } + ], + "eviction": { + "requests": 300, + "distinctObjects": 100, + "upstreamFills": 300, + "hitRate": 0, + "elapsedMs": 24658.882357999995, + "p50Ms": 74.17433299999539, + "p95Ms": 107.83662400000321, + "peakAllocated": 3997696, + "final": { + "blobs": 60, + "originalBytes": 3932160, + "storedBytes": 3932160, + "allocatedBytes": 3932160, + "oldestAccess": 1793616151486, + "budgetBytes": 4194304, + "reservedBytes": 0, + "maxObjectBytes": 65536, + "activeReaders": 0, + "decisions": 0 + } + }, + "assertions": "passed" +} diff --git a/docs/cache-performance-legacy-results.json b/docs/cache-performance-legacy-results.json new file mode 100644 index 0000000..128b58c --- /dev/null +++ b/docs/cache-performance-legacy-results.json @@ -0,0 +1,497 @@ +{ + "measuredAt": "2026-11-02T10:48:59.787Z", + "environment": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 4.84, + 4.64, + 4.01 + ] + }, + "methodology": { + "scope": "Local loopback HTTP, deterministic synthetic content, isolated process per scenario; no production traffic", + "upstreamDelayMs": 20, + "rawSourceBaseline": "Raw local file; anonymization and gzip repeated every request; no transformed-result cache. Not a complete legacy deployment comparison.", + "measurements": "Cold request then 3 warmups, 2 batches each at concurrency 1 (16 requests) and 8 (32 requests). CPU and RSS include server, loopback client, hashing and Node runtime; worker-thread CPU included. First cold request also includes worker startup when applicable.", + "limitations": "Warm OS page cache; no TLS, proxy, GitHub bandwidth, database auth or real-world RTT. Small sample p95 is descriptive, not a capacity SLA. Fresh metadata indexes; not a full-size index test.", + "legacyComparison": "Existing large-file transformedFile cache enabled, isolated TMPDIR, local source file, no Redis coordination or database authorization." + }, + "scenarios": [ + { + "size": 2097152, + "changed": false, + "mode": "legacy-transform", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 3637.6617370000004, + "ttfb": 3425.310189, + "bytes": 799931, + "wallMs": 3672.4500099999996, + "cpuMs": 4809.962 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4325.215086, + "requestsPerSecond": 3.6992379990047968, + "p50Ms": 259.56264199999896, + "p95Ms": 326.0954209999991, + "maxMs": 326.0954209999991, + "ttfbP95Ms": 100.11303399999997, + "cpuMs": 7363.262, + "cpuMsPerRequest": 460.203875, + "peakRssMiB": 269.8828125, + "eventLoopP95Ms": 11.419647, + "wireBytes": 12798896, + "latenciesMs": [ + 271.195162, + 326.0954209999991, + 325.21412000000055, + 268.0655480000005, + 254.55466100000012, + 262.5113799999999, + 254.16493199999968, + 256.40336600000046, + 270.1401279999991, + 254.43623800000023, + 300.7399460000015, + 260.95136600000114, + 253.6488389999995, + 259.56264199999896, + 254.29303199999958, + 246.70169999999962 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4144.421229, + "requestsPerSecond": 3.8606114378630894, + "p50Ms": 257.6290540000009, + "p95Ms": 284.40178000000014, + "maxMs": 284.40178000000014, + "ttfbP95Ms": 99.43109800000093, + "cpuMs": 7050.23, + "cpuMsPerRequest": 440.639375, + "peakRssMiB": 270.28515625, + "eventLoopP95Ms": 11.386879, + "wireBytes": 12798896, + "latenciesMs": [ + 255.06874499999867, + 245.9648269999998, + 263.4925280000007, + 240.60825599999953, + 265.1590239999987, + 264.77967999999964, + 243.70354000000043, + 269.05731899999955, + 257.6290540000009, + 255.93209899999965, + 264.11589300000014, + 276.2427490000009, + 257.6929230000005, + 284.40178000000014, + 255.67801800000052, + 239.9359570000015 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2457.372474, + "requestsPerSecond": 13.022038921072411, + "p50Ms": 627.6892860000007, + "p95Ms": 675.1984000000011, + "maxMs": 676.5109240000002, + "ttfbP95Ms": 362.1158489999998, + "cpuMs": 9279.507, + "cpuMsPerRequest": 289.98459375, + "peakRssMiB": 257.109375, + "eventLoopP95Ms": 14.229503, + "wireBytes": 25597792, + "latenciesMs": [ + 638.7337129999996, + 644.2589910000006, + 653.9658299999992, + 660.062434999998, + 653.491895000001, + 667.5545409999995, + 675.1984000000011, + 676.5109240000002, + 518.4652159999969, + 508.24069299999974, + 529.0743550000007, + 519.2867880000013, + 517.0170130000006, + 535.1560919999974, + 534.1093989999972, + 539.1497820000004, + 619.183696, + 632.2522540000027, + 627.6892860000007, + 645.0611839999983, + 651.0646340000021, + 634.4353510000001, + 625.0313089999981, + 635.0648269999983, + 653.2990800000007, + 641.2500100000034, + 620.1606979999997, + 619.6126290000029, + 621.0784349999994, + 635.4328630000018, + 609.3666200000007, + 604.615855 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2332.6840220000013, + "requestsPerSecond": 13.718103137073737, + "p50Ms": 591.6440280000024, + "p95Ms": 635.7273109999987, + "maxMs": 641.7715180000014, + "ttfbP95Ms": 325.4839319999992, + "cpuMs": 8533.531, + "cpuMsPerRequest": 266.67284375, + "peakRssMiB": 274.7109375, + "eventLoopP95Ms": 14.196735, + "wireBytes": 25597792, + "latenciesMs": [ + 597.2558779999999, + 606.2361659999988, + 615.4332890000005, + 619.6175079999994, + 623.0158960000008, + 626.0080349999989, + 626.6588200000006, + 626.664377000001, + 502.19446700000117, + 489.31906900000104, + 500.0022510000017, + 517.2302520000012, + 523.0413550000012, + 527.0690040000009, + 527.3038940000006, + 531.9332829999985, + 578.1515760000002, + 617.7991489999986, + 576.213284999998, + 635.7273109999987, + 591.6440280000024, + 641.7715180000014, + 588.0470649999988, + 617.4792789999992, + 592.6901799999978, + 596.9206689999992, + 576.3831680000003, + 576.4393070000006, + 568.0410200000006, + 592.3916649999992, + 599.7627519999987, + 584.0048639999986 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 4554.967507000029, + "b0": 0, + "b1": 0, + "b2": 32, + "b3": 67, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "legacy_result_hit", + "traffic": "background", + "count": 99, + "bytes": 0, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "legacy_result_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "legacy-transform", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2903.1252619999996, + "ttfb": 2710.632705, + "bytes": 799783, + "wallMs": 2938.953792, + "cpuMs": 3776.116 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4094.466308000001, + "requestsPerSecond": 3.9077131905416564, + "p50Ms": 250.63896699999987, + "p95Ms": 328.3509729999996, + "maxMs": 328.3509729999996, + "ttfbP95Ms": 139.6392849999993, + "cpuMs": 5652.677, + "cpuMsPerRequest": 353.2923125, + "peakRssMiB": 335.65234375, + "eventLoopP95Ms": 11.599871, + "wireBytes": 12796528, + "latenciesMs": [ + 274.80920400000014, + 250.63896699999987, + 328.3509729999996, + 261.9780500000006, + 224.44531199999983, + 288.4866490000004, + 260.0317410000007, + 265.3711569999996, + 220.20456599999852, + 236.22282199999972, + 256.1077639999985, + 283.01616699999977, + 235.04550499999823, + 246.0147109999998, + 221.8804140000011, + 237.00552799999969 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 3646.5368070000004, + "requestsPerSecond": 4.387724804884987, + "p50Ms": 218.23768400000154, + "p95Ms": 286.0494230000004, + "maxMs": 286.0494230000004, + "ttfbP95Ms": 137.9453310000008, + "cpuMs": 5961.413, + "cpuMsPerRequest": 372.5883125, + "peakRssMiB": 336.703125, + "eventLoopP95Ms": 13.033471, + "wireBytes": 12796528, + "latenciesMs": [ + 203.70693100000062, + 211.7173640000001, + 252.71899200000007, + 286.0494230000004, + 211.1080320000001, + 274.02094000000034, + 212.45707100000072, + 181.00006699999904, + 206.20519800000147, + 234.44334700000036, + 247.34129100000064, + 221.80664199999956, + 194.29920999999922, + 232.47182499999872, + 218.23768400000154, + 254.94733899999846 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2860.0330489999997, + "requestsPerSecond": 11.188681896941256, + "p50Ms": 674.8104320000002, + "p95Ms": 937.1299240000008, + "maxMs": 956.4731780000002, + "ttfbP95Ms": 349.0807139999997, + "cpuMs": 8294.185, + "cpuMsPerRequest": 259.19328125, + "peakRssMiB": 306.8125, + "eventLoopP95Ms": 17.088511, + "wireBytes": 25593056, + "latenciesMs": [ + 838.9425090000004, + 836.6894339999999, + 840.9874359999994, + 914.8391210000009, + 929.2231830000001, + 932.435884999999, + 937.1299240000008, + 956.4731780000002, + 609.6644930000002, + 624.2318410000007, + 635.5053589999989, + 565.2249200000006, + 555.5831100000014, + 544.6693990000003, + 574.0213219999987, + 577.7646199999999, + 662.6372410000004, + 674.8104320000002, + 673.4079709999987, + 651.1047060000001, + 651.0912209999988, + 671.7599570000002, + 700.2244200000005, + 673.7866299999987, + 716.5474200000026, + 688.9938089999996, + 682.0821550000001, + 701.2659249999997, + 688.1068889999988, + 664.9055890000018, + 677.3972719999983, + 690.5366940000022 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2979.963332000003, + "requestsPerSecond": 10.738387166167978, + "p50Ms": 715.5634050000008, + "p95Ms": 839.5880639999996, + "maxMs": 839.9379399999998, + "ttfbP95Ms": 469.71283799999946, + "cpuMs": 7910.049, + "cpuMsPerRequest": 247.18903125, + "peakRssMiB": 308.02734375, + "eventLoopP95Ms": 19.464191, + "wireBytes": 25593056, + "latenciesMs": [ + 675.5995089999997, + 677.2758930000018, + 682.5500949999987, + 695.3682000000008, + 695.637243000001, + 707.3496059999998, + 708.2368339999994, + 715.5634050000008, + 622.8828360000007, + 622.234027999999, + 640.7814050000015, + 628.4150020000016, + 638.2158200000013, + 632.4952449999982, + 640.3528240000014, + 655.5803180000003, + 819.2730220000012, + 839.5432240000009, + 815.6718389999987, + 823.1129099999998, + 807.2870309999998, + 839.9379399999998, + 839.5880639999996, + 822.5235159999975, + 800.3038809999998, + 836.5671479999983, + 794.8266949999997, + 782.2958900000012, + 780.0966379999991, + 797.6877550000027, + 833.3983110000008, + 831.9884109999985 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 4202.822877000019, + "b0": 0, + "b1": 0, + "b2": 34, + "b3": 65, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "legacy_result_hit", + "traffic": "background", + "count": 99, + "bytes": 0, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "legacy_result_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + } + ], + "completedAt": "2026-11-02T10:49:41.535Z", + "assertions": "All 200 response bodies verified against expected output or the validated wire digest" +} diff --git a/docs/cache-performance-normal-results.json b/docs/cache-performance-normal-results.json new file mode 100644 index 0000000..c6b6633 --- /dev/null +++ b/docs/cache-performance-normal-results.json @@ -0,0 +1,1472 @@ +{ + "measuredAt": "2026-11-02T10:48:24.831Z", + "environment": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 5.04, + 4.67, + 3.99 + ] + }, + "methodology": { + "scope": "Local loopback HTTP, deterministic synthetic content, isolated process per scenario; no production traffic", + "upstreamDelayMs": 20, + "rawSourceBaseline": "Raw local file; anonymization and gzip repeated every request; no transformed-result cache. Not a complete legacy deployment comparison.", + "measurements": "Cold request then 3 warmups, 2 batches each at concurrency 1 (16 requests) and 8 (32 requests). CPU and RSS include server, loopback client, hashing and Node runtime; worker-thread CPU included. First cold request also includes worker startup when applicable.", + "limitations": "Warm OS page cache; no TLS, proxy, GitHub bandwidth, database auth or real-world RTT. Small sample p95 is descriptive, not a capacity SLA. Fresh metadata indexes; not a full-size index test.", + "experimentalOverride": "PRAGMA synchronous=NORMAL in both temporary pool connections only. Application defaults are unchanged. WAL commits may be lost after power failure." + }, + "scenarios": [ + { + "size": 16384, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "sqliteNormal": true, + "cold": { + "ms": 211.99763500000017, + "ttfb": 210.4843780000001, + "bytes": 6286, + "wallMs": 217.12378900000022, + "cpuMs": 208.52 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 129.6802389999998, + "requestsPerSecond": 123.38040185135705, + "p50Ms": 7.405222999999751, + "p95Ms": 10.63064200000008, + "maxMs": 10.63064200000008, + "ttfbP95Ms": 9.930589999999938, + "cpuMs": 158.749, + "cpuMsPerRequest": 9.9218125, + "peakRssMiB": 139.69921875, + "eventLoopP95Ms": 11.837439, + "wireBytes": 100576, + "latenciesMs": [ + 8.86342599999989, + 9.86466399999972, + 8.89197299999978, + 7.601117000000158, + 10.63064200000008, + 8.569281000000046, + 6.669886000000133, + 8.34594399999969, + 6.314068999999563, + 6.768948999999793, + 7.008024999999634, + 7.015354000000116, + 6.58103200000005, + 7.002148000000034, + 8.309251000000131, + 7.405222999999751 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 107.8144470000002, + "requestsPerSecond": 148.4031170702009, + "p50Ms": 6.638319000000138, + "p95Ms": 9.330415999999786, + "maxMs": 9.330415999999786, + "ttfbP95Ms": 8.970339999999851, + "cpuMs": 120.029, + "cpuMsPerRequest": 7.5018125, + "peakRssMiB": 141.24609375, + "eventLoopP95Ms": 10.731519, + "wireBytes": 100576, + "latenciesMs": [ + 6.064622999999756, + 6.900600000000395, + 6.856596999999965, + 6.654391999999916, + 6.608584999999948, + 6.638319000000138, + 6.669634000000315, + 7.5123530000000756, + 9.330415999999786, + 7.551006000000143, + 7.421205999999984, + 5.351235999999972, + 5.80967499999997, + 5.3357780000001185, + 5.540296000000126, + 5.002653999999893 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 169.23432700000012, + "requestsPerSecond": 189.08693388191853, + "p50Ms": 40.41041099999984, + "p95Ms": 58.15863500000023, + "maxMs": 63.950413000000026, + "ttfbP95Ms": 57.95974100000012, + "cpuMs": 203.853, + "cpuMsPerRequest": 6.37040625, + "peakRssMiB": 144.8515625, + "eventLoopP95Ms": 14.991359, + "wireBytes": 201152, + "latenciesMs": [ + 25.70338700000002, + 30.679279999999835, + 36.069988000000194, + 42.17374199999995, + 46.82847199999969, + 52.06783799999994, + 58.15863500000023, + 39.88046499999973, + 63.950413000000026, + 40.88007599999992, + 41.45565600000009, + 41.3820340000002, + 41.48556400000007, + 41.46290900000031, + 40.68188700000019, + 40.6027039999999, + 40.67867299999989, + 40.960299999999734, + 40.41041099999984, + 40.23441899999989, + 40.10125199999993, + 40.36940299999969, + 40.27873899999986, + 40.82878299999993, + 40.75896700000021, + 39.86777200000006, + 38.923733000000084, + 36.24865600000021, + 33.810453999999936, + 30.185067000000345, + 26.375299999999697, + 21.669115999999576 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 154.96046100000012, + "requestsPerSecond": 206.50429014921409, + "p50Ms": 37.81797899999992, + "p95Ms": 45.19201900000007, + "maxMs": 45.98549300000013, + "ttfbP95Ms": 45.004291000000194, + "cpuMs": 189.763, + "cpuMsPerRequest": 5.93009375, + "peakRssMiB": 147.6875, + "eventLoopP95Ms": 17.514495, + "wireBytes": 201152, + "latenciesMs": [ + 31.767119999999977, + 32.30844799999977, + 33.03265899999997, + 33.612348999999995, + 34.19755699999996, + 34.89241700000002, + 35.477110999999695, + 38.635037999999895, + 38.07372200000009, + 37.88975500000015, + 37.81797899999992, + 37.93395600000031, + 38.00886000000037, + 37.99365799999987, + 38.14913999999999, + 45.19201900000007, + 36.45409900000004, + 35.66923100000031, + 37.15967200000023, + 36.40817700000025, + 36.473527000000104, + 36.414574999999786, + 36.38251900000023, + 45.98549300000013, + 40.22782499999994, + 40.02091399999972, + 39.76114600000028, + 39.421302999999625, + 38.982031000000006, + 38.58864700000004, + 40.97996400000011, + 23.516125999999986 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "oldestAccess": 1793616507968, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 16533, + "storedBytes": 6286, + "allocatedBytes": 8192, + "oldestAccess": 1793616508056, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 32917, + "ms": 14.31263700000045, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 5.093956000000162, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 8.687069999999949, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 16533, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 6286, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 62.00214899999992, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "sqliteNormal": true, + "cold": { + "ms": 293.5069330000001, + "ttfb": 290.05206, + "bytes": 100797, + "wallMs": 304.22281799999973, + "cpuMs": 507.88 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 210.48696199999995, + "requestsPerSecond": 76.01420937416543, + "p50Ms": 12.352023999999801, + "p95Ms": 16.41937599999983, + "maxMs": 16.41937599999983, + "ttfbP95Ms": 13.889098999999987, + "cpuMs": 252.283, + "cpuMsPerRequest": 15.7676875, + "peakRssMiB": 154.44140625, + "eventLoopP95Ms": 11.567103, + "wireBytes": 1612752, + "latenciesMs": [ + 13.721564999999828, + 12.36434700000018, + 15.396739999999681, + 11.028957999999875, + 13.326234000000113, + 14.298448000000008, + 12.173980999999912, + 11.955479999999625, + 12.359015999999883, + 10.64623900000015, + 11.49606700000004, + 11.256077999999889, + 11.702889000000141, + 16.41937599999983, + 15.029231999999865, + 12.352023999999801 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 188.85026900000048, + "requestsPerSecond": 84.7232047098644, + "p50Ms": 10.721991999999773, + "p95Ms": 17.00100399999974, + "maxMs": 17.00100399999974, + "ttfbP95Ms": 12.034526000000369, + "cpuMs": 201.592, + "cpuMsPerRequest": 12.5995, + "peakRssMiB": 160.62890625, + "eventLoopP95Ms": 11.468799, + "wireBytes": 1612752, + "latenciesMs": [ + 17.00100399999974, + 14.88057900000058, + 14.272201000000678, + 9.798923000000286, + 10.721991999999773, + 10.789474000000155, + 10.855854999999792, + 10.213137000000643, + 10.237719000000652, + 10.6482960000003, + 12.125573999999688, + 10.437383000000409, + 10.726919000000635, + 14.035103000000163, + 9.206234999999651, + 9.103843999999299 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 321.83904299999995, + "requestsPerSecond": 99.4285830013483, + "p50Ms": 76.97396200000003, + "p95Ms": 101.27760000000035, + "maxMs": 114.23650499999985, + "ttfbP95Ms": 99.7476370000004, + "cpuMs": 370.741, + "cpuMsPerRequest": 11.58565625, + "peakRssMiB": 173.26171875, + "eventLoopP95Ms": 14.131199, + "wireBytes": 3225504, + "latenciesMs": [ + 33.88383999999951, + 41.71044400000028, + 58.122793999999885, + 69.69017199999962, + 79.09965499999998, + 91.05045699999937, + 101.27760000000035, + 80.30536500000017, + 114.23650499999985, + 85.15556800000013, + 79.74570799999947, + 79.68840499999988, + 79.77701500000057, + 77.70543700000053, + 77.88724300000013, + 77.63266000000021, + 77.2407089999997, + 76.90941199999997, + 76.63940699999966, + 76.22754799999984, + 76.08746900000006, + 76.6449590000002, + 76.97396200000003, + 77.36400799999956, + 77.79437599999983, + 77.67049299999962, + 76.33652299999994, + 72.64776499999971, + 69.11045999999988, + 64.30537100000038, + 58.15600500000073, + 51.419238999999834 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 285.17441599999984, + "requestsPerSecond": 112.21202956719658, + "p50Ms": 70.30395399999998, + "p95Ms": 88.38484100000005, + "maxMs": 89.62643300000036, + "ttfbP95Ms": 86.65742500000033, + "cpuMs": 335.036, + "cpuMsPerRequest": 10.469875, + "peakRssMiB": 185.6328125, + "eventLoopP95Ms": 26.378239, + "wireBytes": 3225504, + "latenciesMs": [ + 50.76651200000015, + 53.052144000000226, + 55.29471900000044, + 57.49452800000017, + 59.75971899999968, + 61.97880600000008, + 68.10093200000028, + 70.30395399999998, + 72.06762200000048, + 71.92879700000049, + 71.74902699999984, + 71.97104899999977, + 71.95491599999968, + 72.28398599999946, + 72.26563500000066, + 85.26547600000049, + 73.90955599999961, + 74.00829199999953, + 74.18391499999962, + 74.22111900000073, + 71.49974400000065, + 76.97323899999992, + 88.38484100000005, + 89.62643300000036, + 70.00443700000051, + 68.80143299999963, + 67.5793819999999, + 66.37630400000035, + 65.04377699999986, + 63.62544100000014, + 50.910139999999956, + 37.8048660000004 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "oldestAccess": 1793616512598, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "oldestAccess": 1793616512728, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 59.854179999999815, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 16.13214199999993, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 11.398297999999613, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 80.17924799999992, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "sqliteNormal": true, + "cold": { + "ms": 3895.830503, + "ttfb": 3874.0584689999996, + "bytes": 799783, + "wallMs": 3936.330007, + "cpuMs": 5059.91 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 491.4772549999998, + "requestsPerSecond": 32.55491446903277, + "p50Ms": 28.168635999999424, + "p95Ms": 55.91509099999985, + "maxMs": 55.91509099999985, + "ttfbP95Ms": 11.918882999999369, + "cpuMs": 741.012, + "cpuMsPerRequest": 46.31325, + "peakRssMiB": 307.65625, + "eventLoopP95Ms": 12.066815, + "wireBytes": 12796528, + "latenciesMs": [ + 29.214450999999826, + 30.657991000000038, + 27.714160000000447, + 27.467883999999685, + 31.247449000000415, + 29.387684000000263, + 27.83542100000068, + 25.95565600000009, + 27.980251999999382, + 28.38646299999982, + 31.87017400000059, + 28.168635999999424, + 27.450691000000006, + 32.11927700000069, + 55.91509099999985, + 25.516120999999657 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 300.0151870000009, + "requestsPerSecond": 53.330633558893645, + "p50Ms": 16.304980999999316, + "p95Ms": 27.05466499999966, + "maxMs": 27.05466499999966, + "ttfbP95Ms": 8.828843999999663, + "cpuMs": 657.816, + "cpuMsPerRequest": 41.1135, + "peakRssMiB": 306.9453125, + "eventLoopP95Ms": 17.203199, + "wireBytes": 12796528, + "latenciesMs": [ + 24.194515999999567, + 23.75684999999976, + 16.047802999999476, + 20.503551000001607, + 26.786025999999765, + 15.512760000001435, + 15.14806900000076, + 15.85907699999916, + 16.5129909999996, + 16.304980999999316, + 14.97947799999929, + 14.789507000001322, + 16.779403000000457, + 17.483801999998832, + 27.05466499999966, + 15.400590000001102 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 837.695287999999, + "requestsPerSecond": 38.20004774814973, + "p50Ms": 189.4029389999996, + "p95Ms": 348.26719199999934, + "maxMs": 357.93987599999855, + "ttfbP95Ms": 215.3000549999997, + "cpuMs": 1374.05, + "cpuMsPerRequest": 42.9390625, + "peakRssMiB": 307.4296875, + "eventLoopP95Ms": 34.308095, + "wireBytes": 25593056, + "latenciesMs": [ + 152.89308900000105, + 155.40326900000036, + 253.31474900000103, + 265.136853, + 278.6052789999994, + 288.2736620000014, + 348.26719199999934, + 357.93987599999855, + 326.1916600000004, + 324.75534399999924, + 240.582398999999, + 239.51983999999902, + 251.59744899999896, + 251.5121199999994, + 200.49180200000046, + 198.40286000000015, + 191.77191099999982, + 191.57550099999935, + 189.4029389999996, + 188.2004710000001, + 174.05179299999872, + 172.84166600000026, + 184.06443800000125, + 182.04996000000028, + 144.6964420000004, + 143.90832500000033, + 138.88750599999912, + 133.18058800000108, + 124.68706100000054, + 118.48172799999884, + 100.3971419999998, + 95.42150899999979 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 618.4260970000014, + "requestsPerSecond": 51.74425878085143, + "p50Ms": 153.40622599999915, + "p95Ms": 178.48253099999965, + "maxMs": 187.28157199999987, + "ttfbP95Ms": 75.5139339999987, + "cpuMs": 1175.679, + "cpuMsPerRequest": 36.73996875, + "peakRssMiB": 307.93359375, + "eventLoopP95Ms": 19.070975, + "wireBytes": 25593056, + "latenciesMs": [ + 119.30973300000005, + 121.43536399999903, + 121.91141799999968, + 122.556634999999, + 123.16853300000002, + 123.91257899999982, + 124.5778250000003, + 128.95534399999997, + 168.5831849999995, + 170.0214449999985, + 177.42017099999975, + 177.41772100000162, + 177.4455770000004, + 176.86535999999978, + 178.48253099999965, + 187.28157199999987, + 154.1961620000002, + 164.48928199999864, + 163.2199300000011, + 161.56209900000067, + 161.38791400000082, + 161.23440499999924, + 160.97795100000076, + 157.75086399999964, + 153.40622599999915, + 151.76738400000067, + 151.36204999999973, + 151.03709400000116, + 150.6052839999993, + 150.409533, + 150.17662799999925, + 142.62102500000037 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "oldestAccess": 1793616518145, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "oldestAccess": 1793616521612, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 373.338264, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 214.41180200000008, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2950.512455, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 3269.1114059999995, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + } + ], + "completedAt": "2026-11-02T10:48:44.284Z", + "assertions": "All 300 response bodies verified against expected output or the validated wire digest" +} diff --git a/docs/cache-performance-optimized-repeat-results.json b/docs/cache-performance-optimized-repeat-results.json new file mode 100644 index 0000000..296df13 --- /dev/null +++ b/docs/cache-performance-optimized-repeat-results.json @@ -0,0 +1,1468 @@ +{ + "measuredAt": "2026-11-02T11:11:22.323Z", + "environment": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 2.4, + 2.85, + 2.97 + ] + }, + "methodology": { + "scope": "Local loopback HTTP, deterministic synthetic content, isolated process per scenario; no production traffic", + "upstreamDelayMs": 20, + "rawSourceBaseline": "Raw local file; anonymization and gzip repeated every request; no transformed-result cache. Not a complete legacy deployment comparison.", + "measurements": "Cold request then 3 warmups, 2 batches each at concurrency 1 (16 requests) and 8 (32 requests). CPU and RSS include server, loopback client, hashing and Node runtime; worker-thread CPU included. First cold request also includes worker startup when applicable.", + "limitations": "Warm OS page cache; no TLS, proxy, GitHub bandwidth, database auth or real-world RTT. Small sample p95 is descriptive, not a capacity SLA. Fresh metadata indexes; not a full-size index test." + }, + "scenarios": [ + { + "size": 16384, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 564.9107599999998, + "ttfb": 563.4648089999996, + "bytes": 6286, + "wallMs": 569.453117, + "cpuMs": 292.773 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 136.54391300000043, + "requestsPerSecond": 117.1784201028423, + "p50Ms": 7.833516000000145, + "p95Ms": 10.936538999999811, + "maxMs": 10.936538999999811, + "ttfbP95Ms": 10.482899999999972, + "cpuMs": 168.862, + "cpuMsPerRequest": 10.553875, + "peakRssMiB": 144.78125, + "eventLoopP95Ms": 11.460607, + "wireBytes": 100576, + "latenciesMs": [ + 10.936538999999811, + 9.289854000000105, + 9.214022999999997, + 8.506705000000238, + 9.490383000000293, + 8.551514000000225, + 8.043412999999873, + 9.23324300000013, + 7.195075000000088, + 6.832499000000098, + 7.134262000000035, + 7.685696000000007, + 7.136031000000003, + 7.162805999999819, + 7.833516000000145, + 6.775481000000127 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 117.03794100000005, + "requestsPerSecond": 136.70780486474888, + "p50Ms": 7.109433000000081, + "p95Ms": 7.858342999999877, + "maxMs": 7.858342999999877, + "ttfbP95Ms": 7.530091000000084, + "cpuMs": 128.469, + "cpuMsPerRequest": 8.0293125, + "peakRssMiB": 146.5859375, + "eventLoopP95Ms": 11.100159, + "wireBytes": 100576, + "latenciesMs": [ + 6.814390000000003, + 7.336291000000074, + 7.421086000000287, + 7.277678999999807, + 6.7760620000003655, + 7.069644000000153, + 6.9805639999999585, + 7.016908999999941, + 7.6321539999999, + 7.109433000000081, + 7.147471000000223, + 7.34299400000009, + 7.858342999999877, + 6.345409999999902, + 6.908492000000024, + 7.257277000000158 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 218.2937109999998, + "requestsPerSecond": 146.59148838236584, + "p50Ms": 53.23416300000008, + "p95Ms": 76.44917199999963, + "maxMs": 84.09819500000003, + "ttfbP95Ms": 76.18761899999981, + "cpuMs": 255.045, + "cpuMsPerRequest": 7.97015625, + "peakRssMiB": 150.96484375, + "eventLoopP95Ms": 16.228351, + "wireBytes": 201152, + "latenciesMs": [ + 33.80324500000006, + 40.4772780000003, + 47.88071499999978, + 55.74568700000009, + 62.004873999999745, + 69.26760800000011, + 76.44917199999963, + 52.36573199999975, + 84.09819500000003, + 53.428629999999885, + 54.2250039999999, + 54.21691099999998, + 54.202999999999975, + 54.131930999999895, + 53.819536999999855, + 53.40177900000026, + 53.41150800000014, + 53.23416300000008, + 52.19577799999979, + 52.31759499999998, + 52.20160100000021, + 52.519354999999905, + 52.92560600000024, + 53.84798499999988, + 53.9380970000002, + 54.21456000000035, + 52.25745400000005, + 47.08588299999974, + 42.743175000000065, + 36.88454999999976, + 30.871662000000015, + 24.135533000000123 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 314.29809699999987, + "requestsPerSecond": 101.81417038614781, + "p50Ms": 57.02768500000002, + "p95Ms": 115.74330899999995, + "maxMs": 162.3089359999999, + "ttfbP95Ms": 115.44014000000016, + "cpuMs": 246.65, + "cpuMsPerRequest": 7.7078125, + "peakRssMiB": 154.05859375, + "eventLoopP95Ms": 39.747583, + "wireBytes": 201152, + "latenciesMs": [ + 52.71764399999984, + 53.40298899999971, + 54.259477999999945, + 54.939348999999766, + 55.62139800000023, + 56.307174999999916, + 57.02768500000002, + 57.747460000000046, + 54.718483000000106, + 54.53288999999995, + 54.65849299999991, + 54.99311899999975, + 55.06853199999978, + 55.0104980000001, + 55.385193999999956, + 55.34810200000038, + 82.21564999999964, + 82.2951109999999, + 82.24049500000001, + 81.94626700000026, + 82.17782099999977, + 82.11242599999969, + 81.89210899999989, + 162.3089359999999, + 113.49327300000004, + 112.98526300000003, + 112.54999499999985, + 115.74330899999995, + 115.20574999999963, + 114.94514900000013, + 114.91399699999965, + 37.00665200000003 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617884991 + }, + "results": { + "blobs": 1, + "originalBytes": 16533, + "storedBytes": 6286, + "allocatedBytes": 8192, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617885263 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 32917, + "ms": 9.960051000000021, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 4.605956000000333, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 8.382837999999992, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 16533, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 6286, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 64.26109600000018, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 716.9965659999998, + "ttfb": 714.1441059999997, + "bytes": 100797, + "wallMs": 734.790919, + "cpuMs": 294.739 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 175.48195699999997, + "requestsPerSecond": 91.17746504274513, + "p50Ms": 9.798607000000175, + "p95Ms": 14.855011999999988, + "maxMs": 14.855011999999988, + "ttfbP95Ms": 12.798651000000064, + "cpuMs": 196.122, + "cpuMsPerRequest": 12.257625, + "peakRssMiB": 151.234375, + "eventLoopP95Ms": 12.255231, + "wireBytes": 1612752, + "latenciesMs": [ + 14.855011999999988, + 11.753069999999752, + 13.427162999999837, + 11.852770999999848, + 13.664025999999922, + 11.01765400000022, + 11.739067999999861, + 9.798607000000175, + 10.127921000000242, + 9.218249000000014, + 9.021533999999974, + 8.85241700000006, + 8.719599000000017, + 8.9770410000001, + 9.53448299999991, + 8.697309000000132 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 141.6866570000002, + "requestsPerSecond": 112.92524178899907, + "p50Ms": 8.504296999999951, + "p95Ms": 9.95738799999981, + "maxMs": 9.95738799999981, + "ttfbP95Ms": 7.637522999999874, + "cpuMs": 151.988, + "cpuMsPerRequest": 9.49925, + "peakRssMiB": 157.9375, + "eventLoopP95Ms": 11.010047, + "wireBytes": 1612752, + "latenciesMs": [ + 9.168979000000036, + 9.428877999999713, + 9.328395999999884, + 8.018382000000202, + 8.487834999999905, + 9.108036000000084, + 8.472861000000194, + 8.144168000000263, + 8.547545999999784, + 8.504296999999951, + 8.181646999999884, + 8.606808000000001, + 8.607372999999825, + 9.95738799999981, + 7.854209000000083, + 8.335544000000027 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 240.4814779999997, + "requestsPerSecond": 133.0663811039952, + "p50Ms": 55.48106300000018, + "p95Ms": 68.55306800000017, + "maxMs": 75.54825300000039, + "ttfbP95Ms": 67.65258700000004, + "cpuMs": 275.352, + "cpuMsPerRequest": 8.60475, + "peakRssMiB": 170.828125, + "eventLoopP95Ms": 17.727487, + "wireBytes": 3225504, + "latenciesMs": [ + 27.078287999999702, + 34.41708999999992, + 43.45903499999986, + 51.223361000000295, + 56.82686999999987, + 62.78670999999986, + 68.55306800000017, + 48.88810999999987, + 75.54825300000039, + 49.346093999999994, + 47.862227000000075, + 47.26073399999996, + 49.09889299999986, + 51.510875999999826, + 53.445500000000266, + 55.48106300000018, + 55.9735740000001, + 57.09433600000011, + 57.65626300000031, + 58.46312999999964, + 59.24638199999981, + 59.34531100000004, + 59.45986000000039, + 59.395394000000124, + 59.527739999999994, + 58.63219100000015, + 57.383404000000155, + 55.82568200000014, + 53.31837099999984, + 50.166263999999956, + 46.95046100000036, + 48.37220900000011 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 329.50862700000016, + "requestsPerSecond": 97.11430104681291, + "p50Ms": 75.82031099999995, + "p95Ms": 108.76944600000024, + "maxMs": 109.65582700000004, + "ttfbP95Ms": 107.35711500000025, + "cpuMs": 309.551, + "cpuMsPerRequest": 9.67346875, + "peakRssMiB": 187.0703125, + "eventLoopP95Ms": 40.763391, + "wireBytes": 3225504, + "latenciesMs": [ + 43.839824000000135, + 45.59687500000018, + 47.36147400000027, + 49.13848800000005, + 50.88520000000017, + 52.589964999999665, + 57.19770299999982, + 58.96943599999986, + 57.9998529999998, + 57.8944590000001, + 58.198053999999956, + 58.582212000000254, + 59.0497290000003, + 59.458959999999934, + 60.50792500000034, + 75.82031099999995, + 93.56598600000007, + 94.52324799999997, + 94.79224199999999, + 94.86072400000012, + 94.99297400000023, + 94.7230010000003, + 95.30575499999986, + 104.44165999999996, + 109.65582700000004, + 108.76944600000024, + 108.07293499999969, + 107.61299899999995, + 107.09455100000014, + 106.82271599999967, + 106.88173700000016, + 88.10474000000022 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617889075 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617889396 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 56.435169000000315, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 14.010060000000067, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 15.848896999999852, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 98.41796599999998, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 3351.5030090000005, + "ttfb": 3334.1238710000002, + "bytes": 799783, + "wallMs": 3382.5702140000003, + "cpuMs": 3892.494 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 406.13630100000046, + "requestsPerSecond": 39.39564121848833, + "p50Ms": 25.25823599999967, + "p95Ms": 33.44538900000043, + "maxMs": 33.44538900000043, + "ttfbP95Ms": 22.28428200000053, + "cpuMs": 670.287, + "cpuMsPerRequest": 41.8929375, + "peakRssMiB": 306.23046875, + "eventLoopP95Ms": 11.649023, + "wireBytes": 12796528, + "latenciesMs": [ + 27.70205100000021, + 27.711921999999504, + 25.873669999999947, + 29.60932700000012, + 26.403964000000087, + 26.34222200000022, + 25.25823599999967, + 24.619736000000557, + 24.691138999999566, + 18.07619799999975, + 19.012864000000263, + 18.775096999999732, + 19.539826000000176, + 23.80247899999995, + 30.63727899999958, + 33.44538900000043 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 297.4622560000007, + "requestsPerSecond": 53.788336762967205, + "p50Ms": 17.528103000000556, + "p95Ms": 29.370589999999538, + "maxMs": 29.370589999999538, + "ttfbP95Ms": 18.674189000000297, + "cpuMs": 527.303, + "cpuMsPerRequest": 32.9564375, + "peakRssMiB": 303.21484375, + "eventLoopP95Ms": 11.042815, + "wireBytes": 12796528, + "latenciesMs": [ + 17.123695000000225, + 17.633850999999595, + 17.79764999999952, + 20.976905000000443, + 19.01901700000053, + 29.370589999999538, + 17.67556599999989, + 17.195583000000624, + 17.528103000000556, + 16.921080000000075, + 17.66193999999996, + 16.491444999999658, + 17.307662999999593, + 16.749727999999777, + 17.582749999999578, + 17.449757999999747 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 440.92857399999957, + "requestsPerSecond": 72.57411264981896, + "p50Ms": 107.18087600000035, + "p95Ms": 128.32072900000003, + "maxMs": 131.93092400000023, + "ttfbP95Ms": 69.8511010000002, + "cpuMs": 828.578, + "cpuMsPerRequest": 25.8930625, + "peakRssMiB": 316.36328125, + "eventLoopP95Ms": 16.498687, + "wireBytes": 25593056, + "latenciesMs": [ + 84.59962600000017, + 85.38154299999951, + 90.37774000000081, + 96.04396700000052, + 103.0060110000004, + 107.59511099999963, + 113.48921400000017, + 118.36855800000012, + 103.2569310000008, + 102.89876999999979, + 103.23632699999962, + 105.963033, + 107.6969280000003, + 110.3119970000007, + 111.99130700000023, + 131.93092400000023, + 128.22241600000052, + 128.32072900000003, + 127.93862999999965, + 125.06648799999948, + 122.43034099999932, + 119.55787499999951, + 117.55360999999994, + 109.95926200000031, + 107.49625600000036, + 107.18087600000035, + 106.65524899999946, + 104.05932600000051, + 100.75023600000077, + 98.11869300000035, + 94.12034399999993, + 77.55358200000046 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 568.7391469999993, + "requestsPerSecond": 56.26480991996853, + "p50Ms": 128.4255519999997, + "p95Ms": 216.38964999999916, + "maxMs": 216.40055700000084, + "ttfbP95Ms": 71.31748700000026, + "cpuMs": 979.144, + "cpuMsPerRequest": 30.59825, + "peakRssMiB": 303.96484375, + "eventLoopP95Ms": 26.181631, + "wireBytes": 25593056, + "latenciesMs": [ + 121.83715399999983, + 123.56001199999992, + 123.79995299999973, + 124.17280399999981, + 124.57832099999996, + 125.02742699999999, + 125.45485600000029, + 128.4255519999997, + 84.52326100000028, + 85.186917, + 85.5510460000005, + 85.86822399999983, + 86.19665500000065, + 90.8152629999995, + 90.60284999999931, + 96.21789699999954, + 128.64474699999937, + 134.69709299999977, + 134.1677719999998, + 133.79856399999971, + 133.40278399999988, + 133.05352200000016, + 132.25471300000027, + 174.91367999999966, + 216.38964999999916, + 216.40055700000084, + 216.2652849999995, + 216.19974999999977, + 216.10748500000045, + 216.13359499999933, + 216.11364199999934, + 167.43831599999976 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617894164 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617896945 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 355.7860559999999, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 211.93944299999976, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2075.7340230000004, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2396.572327, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + } + ], + "completedAt": "2026-11-02T11:11:39.040Z", + "assertions": "All 300 response bodies verified against expected output or the validated wire digest" +} diff --git a/docs/cache-performance-optimized-results.json b/docs/cache-performance-optimized-results.json new file mode 100644 index 0000000..c953a44 --- /dev/null +++ b/docs/cache-performance-optimized-results.json @@ -0,0 +1,6858 @@ +{ + "measuredAt": "2026-11-02T11:05:22.472Z", + "environment": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 2.85, + 2.28, + 2.82 + ] + }, + "methodology": { + "scope": "Local loopback HTTP, deterministic synthetic content, isolated process per scenario; no production traffic", + "upstreamDelayMs": 20, + "rawSourceBaseline": "Raw local file; anonymization and gzip repeated every request; no transformed-result cache. Not a complete legacy deployment comparison.", + "measurements": "Cold request then 3 warmups, 2 batches each at concurrency 1 (16 requests) and 8 (32 requests). CPU and RSS include server, loopback client, hashing and Node runtime; worker-thread CPU included. First cold request also includes worker startup when applicable.", + "limitations": "Warm OS page cache; no TLS, proxy, GitHub bandwidth, database auth or real-world RTT. Small sample p95 is descriptive, not a capacity SLA. Fresh metadata indexes; not a full-size index test." + }, + "scenarios": [ + { + "size": 16384, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 94.7249380000003, + "ttfb": 93.76664400000027, + "bytes": 6297, + "wallMs": 97.14968799999997, + "cpuMs": 259.183 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 468.3105380000002, + "requestsPerSecond": 34.16536400895594, + "p50Ms": 29.35133599999972, + "p95Ms": 32.775622999999996, + "maxMs": 32.775622999999996, + "ttfbP95Ms": 32.15165200000001, + "cpuMs": 208.58, + "cpuMsPerRequest": 13.03625, + "peakRssMiB": 144.28515625, + "eventLoopP95Ms": 15.032319, + "wireBytes": 100752, + "latenciesMs": [ + 32.654821000000084, + 32.775622999999996, + 30.612169999999878, + 29.35133599999972, + 30.856588999999985, + 29.68661499999962, + 29.758229999999912, + 29.66892800000005, + 28.294107000000167, + 29.487605000000258, + 27.875449000000117, + 26.958368000000064, + 26.297397000000274, + 26.47850900000003, + 25.59552599999961, + 27.902255999999852 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 459.66068099999984, + "requestsPerSecond": 34.80828502710243, + "p50Ms": 28.345479999999952, + "p95Ms": 30.874135000000024, + "maxMs": 30.874135000000024, + "ttfbP95Ms": 30.440503000000263, + "cpuMs": 181.728, + "cpuMsPerRequest": 11.358, + "peakRssMiB": 146.97265625, + "eventLoopP95Ms": 13.533183, + "wireBytes": 100752, + "latenciesMs": [ + 28.305525000000216, + 27.525592999999844, + 28.345479999999952, + 29.210749999999734, + 28.12575199999992, + 28.778879999999845, + 26.816969999999856, + 27.78176600000006, + 29.259301999999934, + 28.903049999999894, + 28.974205999999867, + 29.181219000000056, + 30.090970000000198, + 30.874135000000024, + 26.6923069999998, + 27.81111800000008 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 258.9006360000003, + "requestsPerSecond": 123.59954187211792, + "p50Ms": 53.77264399999967, + "p95Ms": 81.41625299999987, + "maxMs": 84.72211299999981, + "ttfbP95Ms": 81.00761299999976, + "cpuMs": 280.214, + "cpuMsPerRequest": 8.7566875, + "peakRssMiB": 155.66015625, + "eventLoopP95Ms": 25.722879, + "wireBytes": 201504, + "latenciesMs": [ + 55.019702999999936, + 71.80415200000016, + 72.94914599999993, + 74.49815799999988, + 75.74368999999979, + 80.57208499999979, + 81.41625299999987, + 84.72211299999981, + 70.29776800000036, + 77.34888200000023, + 76.51204800000005, + 74.87177500000007, + 79.05806800000028, + 74.74620200000027, + 74.1793990000001, + 70.91168199999993, + 51.59257800000023, + 52.59778700000015, + 52.667043999999805, + 52.988290000000234, + 48.0731310000001, + 52.19227099999989, + 52.15893899999992, + 53.77264399999967, + 37.78686700000026, + 51.407220999999936, + 50.93756100000019, + 50.52599400000008, + 51.81087200000002, + 47.14363999999978, + 46.81845700000031, + 45.432460999999876 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 281.0405190000006, + "requestsPerSecond": 113.86258506019885, + "p50Ms": 68.91121500000008, + "p95Ms": 74.31077000000005, + "maxMs": 75.36986899999965, + "ttfbP95Ms": 74.04731700000002, + "cpuMs": 288.289, + "cpuMsPerRequest": 9.00903125, + "peakRssMiB": 163.41796875, + "eventLoopP95Ms": 29.032447, + "wireBytes": 201504, + "latenciesMs": [ + 63.03538400000025, + 63.89530999999988, + 64.68724299999985, + 65.4756510000002, + 69.80789199999981, + 70.64232800000036, + 71.50254700000005, + 74.31077000000005, + 68.84518200000002, + 68.892202, + 68.90824799999973, + 72.42245000000003, + 69.04608800000005, + 69.02546699999994, + 68.96681700000045, + 68.91121500000008, + 71.46825899999976, + 71.36596499999996, + 75.36986899999965, + 71.79958400000032, + 71.52108499999986, + 71.74081699999988, + 71.75029200000017, + 71.45233499999995, + 66.87062500000047, + 66.3939919999998, + 66.6516630000001, + 66.46869400000014, + 66.20289300000059, + 65.61880900000006, + 65.27701899999965, + 64.74033699999973 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 259.98393300000043, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 111.30910799999992, + "ttfb": 109.29464999999982, + "bytes": 6297, + "wallMs": 115.18098700000019, + "cpuMs": 293.739 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 144.95022100000006, + "requestsPerSecond": 110.38272235542155, + "p50Ms": 8.801665999999841, + "p95Ms": 11.500616999999693, + "maxMs": 11.500616999999693, + "ttfbP95Ms": 9.751528999999664, + "cpuMs": 200.126, + "cpuMsPerRequest": 12.507875, + "peakRssMiB": 144.57421875, + "eventLoopP95Ms": 12.533759, + "wireBytes": 100752, + "latenciesMs": [ + 11.500616999999693, + 8.978696000000127, + 8.801665999999841, + 8.01365399999986, + 8.23052699999971, + 9.997205000000122, + 6.882853000000068, + 7.255329999999958, + 7.244159000000309, + 8.193588999999974, + 8.33672499999966, + 9.512402999999722, + 9.167050000000017, + 9.002933000000212, + 9.427815999999893, + 10.221354999999676 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 139.85300099999995, + "requestsPerSecond": 114.40583960010987, + "p50Ms": 8.506908999999723, + "p95Ms": 9.639188000000104, + "maxMs": 9.639188000000104, + "ttfbP95Ms": 9.318159000000378, + "cpuMs": 171.521, + "cpuMsPerRequest": 10.7200625, + "peakRssMiB": 148.96484375, + "eventLoopP95Ms": 12.574719, + "wireBytes": 100752, + "latenciesMs": [ + 9.034889999999905, + 9.165713000000324, + 8.275082000000111, + 8.752664999999979, + 9.11013099999991, + 8.536597000000256, + 8.74366800000007, + 7.686322999999902, + 8.16993599999978, + 9.639188000000104, + 8.299746000000141, + 8.506908999999723, + 8.10059900000033, + 8.192031999999926, + 8.869447000000036, + 7.864637999999559 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 201.21615900000006, + "requestsPerSecond": 159.0329532132655, + "p50Ms": 40.97398000000021, + "p95Ms": 91.53832700000021, + "maxMs": 100.53903000000037, + "ttfbP95Ms": 91.2962550000002, + "cpuMs": 283.131, + "cpuMsPerRequest": 8.84784375, + "peakRssMiB": 159.453125, + "eventLoopP95Ms": 17.809407, + "wireBytes": 201504, + "latenciesMs": [ + 32.55324000000019, + 40.97398000000021, + 48.59315300000026, + 57.743045000000166, + 68.6364609999996, + 81.55310300000019, + 60.569528999999875, + 91.53832700000021, + 61.01180099999965, + 100.53903000000037, + 64.05554200000006, + 62.707074999999804, + 59.84388100000024, + 53.86419500000011, + 49.50664800000004, + 49.192935000000034, + 45.549751000000015, + 45.25038500000028, + 40.5995240000002, + 38.34380699999974, + 35.77694900000006, + 35.70123899999999, + 35.816915999999765, + 35.999765000000025, + 35.14922099999967, + 36.8640690000002, + 34.99909000000025, + 32.91867200000024, + 31.55176500000016, + 25.4980529999998, + 21.80718200000001, + 21.44437999999991 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 166.3072989999996, + "requestsPerSecond": 192.41488613196753, + "p50Ms": 38.349723999999696, + "p95Ms": 50.60086799999999, + "maxMs": 51.08408300000019, + "ttfbP95Ms": 50.376794999999674, + "cpuMs": 238.021, + "cpuMsPerRequest": 7.43815625, + "peakRssMiB": 169.08203125, + "eventLoopP95Ms": 19.300351, + "wireBytes": 201504, + "latenciesMs": [ + 30.43446499999982, + 30.821563999999853, + 31.287852999999814, + 31.72963699999991, + 32.066375999999764, + 34.03085599999986, + 34.54123900000013, + 35.14081199999964, + 34.53919799999994, + 34.53359100000034, + 34.51666600000044, + 34.51771000000008, + 34.5221819999997, + 34.04551399999991, + 38.349723999999696, + 38.144390000000385, + 41.95822399999997, + 42.39409000000023, + 42.67207899999994, + 43.135705000000144, + 43.49982600000021, + 44.59090699999979, + 46.94314399999985, + 47.60465499999964, + 51.08408300000019, + 50.60086799999999, + 50.2118559999999, + 49.792293999999856, + 49.523339999999735, + 49.635095999999976, + 44.51571799999965, + 43.87905899999987 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 221.50338700000566, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 567.5465740000002, + "ttfb": 566.1393930000002, + "bytes": 6297, + "wallMs": 572.0539939999999, + "cpuMs": 400.095 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 127.16685600000028, + "requestsPerSecond": 125.8189476666779, + "p50Ms": 7.341480000000047, + "p95Ms": 9.395590000000084, + "maxMs": 9.395590000000084, + "ttfbP95Ms": 8.957370999999966, + "cpuMs": 159.182, + "cpuMsPerRequest": 9.948875, + "peakRssMiB": 145.82421875, + "eventLoopP95Ms": 11.026431, + "wireBytes": 100752, + "latenciesMs": [ + 9.389092000000346, + 9.395590000000084, + 8.06413799999973, + 8.010659000000032, + 9.34123899999986, + 7.728108999999677, + 7.666353000000072, + 6.799054000000069, + 7.950393000000076, + 6.80590200000006, + 7.341480000000047, + 6.936834999999974, + 6.761050999999952, + 7.118828000000121, + 6.841455000000224, + 7.327276999999867 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 131.58475700000008, + "requestsPerSecond": 121.59463120792927, + "p50Ms": 7.653335999999854, + "p95Ms": 10.37464299999965, + "maxMs": 10.37464299999965, + "ttfbP95Ms": 9.905927999999676, + "cpuMs": 143.897, + "cpuMsPerRequest": 8.9935625, + "peakRssMiB": 148.140625, + "eventLoopP95Ms": 11.329535, + "wireBytes": 100752, + "latenciesMs": [ + 7.615178999999898, + 7.6637189999996735, + 7.459679999999935, + 7.229773999999907, + 7.678200000000288, + 6.821988000000147, + 7.653335999999854, + 6.7868289999996705, + 7.130920999999944, + 7.960301999999956, + 7.605773999999656, + 8.359691000000112, + 9.256739999999809, + 8.531591999999819, + 10.37464299999965, + 10.090421000000333 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 275.57432900000003, + "requestsPerSecond": 116.1211209916436, + "p50Ms": 50.30620200000021, + "p95Ms": 134.4220009999999, + "maxMs": 142.42912399999977, + "ttfbP95Ms": 134.1136919999999, + "cpuMs": 279.006, + "cpuMsPerRequest": 8.7189375, + "peakRssMiB": 151.75, + "eventLoopP95Ms": 24.412159, + "wireBytes": 201504, + "latenciesMs": [ + 46.23658699999987, + 55.535563999999795, + 64.106405, + 75.71286299999974, + 82.57729299999983, + 89.56903299999976, + 134.4220009999999, + 99.93882299999996, + 142.42912399999977, + 97.6174860000001, + 95.62088300000005, + 91.21814499999982, + 90.508108, + 89.5264830000001, + 51.009371999999985, + 49.99619900000016, + 50.04896299999973, + 50.226018000000295, + 50.626170999999886, + 50.1524159999999, + 50.280733000000055, + 50.46629199999961, + 50.30097399999977, + 50.30620200000021, + 50.27824499999997, + 50.17759299999989, + 48.51351799999975, + 45.84034400000019, + 42.020468000000164, + 37.90843900000027, + 33.62208600000031, + 28.345784999999978 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 216.13552600000003, + "requestsPerSecond": 148.05525307301863, + "p50Ms": 44.34035700000004, + "p95Ms": 74.50578099999984, + "maxMs": 77.57574700000032, + "ttfbP95Ms": 74.14339400000017, + "cpuMs": 224.259, + "cpuMsPerRequest": 7.00809375, + "peakRssMiB": 155.1015625, + "eventLoopP95Ms": 21.315583, + "wireBytes": 201504, + "latenciesMs": [ + 42.96026600000005, + 43.492775000000165, + 44.34035700000004, + 44.93096700000024, + 45.732322999999724, + 46.43224400000008, + 47.116505999999845, + 51.442707999999584, + 44.285731999999825, + 44.16926599999988, + 44.056199000000106, + 44.018449000000146, + 44.10913500000015, + 44.15064199999961, + 44.38529299999982, + 52.194332999999915, + 43.03603000000021, + 43.011409000000185, + 43.01015499999994, + 43.19131299999981, + 43.070740000000114, + 42.87855600000012, + 42.675655000000006, + 51.60127000000011, + 74.50578099999984, + 74.44625700000006, + 74.422372, + 73.97722599999997, + 73.55890699999964, + 73.25124800000003, + 77.57574700000032, + 58.90772499999957 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "activeReaders": 1, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617532401 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "activeReaders": 0, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": null + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 7.6723729999998795, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 4.638180999999804, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 4.8004189999996925, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 57.56908700000031, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 100.77653700000019, + "ttfb": 99.66684699999996, + "bytes": 6286, + "wallMs": 103.37854599999991, + "cpuMs": 290.394 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 425.9045550000001, + "requestsPerSecond": 37.56710232883045, + "p50Ms": 26.39766299999974, + "p95Ms": 29.183984000000237, + "maxMs": 29.183984000000237, + "ttfbP95Ms": 28.830406999999923, + "cpuMs": 162.689, + "cpuMsPerRequest": 10.1680625, + "peakRssMiB": 144.5078125, + "eventLoopP95Ms": 11.575295, + "wireBytes": 100576, + "latenciesMs": [ + 29.183984000000237, + 26.751170000000002, + 27.01574900000014, + 26.756972000000133, + 26.65886599999976, + 26.15047199999981, + 25.875770999999986, + 25.277756999999838, + 24.6679680000002, + 25.352570999999898, + 26.053183999999874, + 26.23415100000011, + 26.443514999999934, + 26.39766299999974, + 27.26644699999997, + 26.94056899999987 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 475.9523600000002, + "requestsPerSecond": 33.61680988408166, + "p50Ms": 29.21668200000022, + "p95Ms": 32.0889360000001, + "maxMs": 32.0889360000001, + "ttfbP95Ms": 31.521233999999822, + "cpuMs": 194.314, + "cpuMsPerRequest": 12.144625, + "peakRssMiB": 147.08203125, + "eventLoopP95Ms": 14.237695, + "wireBytes": 100576, + "latenciesMs": [ + 28.85801500000025, + 29.169274999999743, + 28.75969199999963, + 29.10321299999987, + 29.44975899999963, + 32.0889360000001, + 30.04802400000017, + 27.54584900000009, + 27.843348999999762, + 28.10837700000002, + 30.06800999999996, + 30.36283800000001, + 29.36283800000001, + 29.21668200000022, + 30.934230999999727, + 31.816487000000052 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 323.4952509999998, + "requestsPerSecond": 98.91953560703126, + "p50Ms": 79.35964100000001, + "p95Ms": 85.92410999999993, + "maxMs": 89.73910100000012, + "ttfbP95Ms": 85.65054099999998, + "cpuMs": 349.738, + "cpuMsPerRequest": 10.9293125, + "peakRssMiB": 156.64453125, + "eventLoopP95Ms": 40.304639, + "wireBytes": 201152, + "latenciesMs": [ + 76.78351699999985, + 77.70135200000004, + 78.5620759999997, + 79.35964100000001, + 83.89083500000015, + 84.73431200000005, + 85.5678170000001, + 89.73910100000012, + 81.208216, + 80.86137800000006, + 80.85980500000005, + 85.92410999999993, + 82.39615999999978, + 82.75111300000026, + 82.33605100000023, + 81.75849900000003, + 81.06992499999978, + 81.12684799999988, + 81.17422399999987, + 76.32485400000041, + 75.68435, + 75.16633499999989, + 73.38511500000004, + 81.15335400000004, + 73.20042999999987, + 73.01273399999991, + 76.86894799999982, + 76.42415200000005, + 75.9050229999998, + 75.35893400000032, + 72.62646300000006, + 70.22874199999978 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 288.18734600000016, + "requestsPerSecond": 111.03887954886119, + "p50Ms": 66.71331000000009, + "p95Ms": 79.9613430000004, + "maxMs": 84.55149299999994, + "ttfbP95Ms": 79.49548800000002, + "cpuMs": 302.308, + "cpuMsPerRequest": 9.447125, + "peakRssMiB": 166.41796875, + "eventLoopP95Ms": 37.715967, + "wireBytes": 201152, + "latenciesMs": [ + 71.25376300000016, + 71.86516900000015, + 72.59741699999995, + 73.54448200000024, + 78.23850999999968, + 78.89873799999987, + 79.9613430000004, + 84.55149299999994, + 78.51469700000007, + 78.61604299999999, + 78.63593600000013, + 79.03167899999971, + 75.37253699999974, + 75.49452100000008, + 77.28876600000012, + 76.89829399999962, + 65.22182800000064, + 64.91293399999995, + 64.60253899999952, + 63.8958649999995, + 63.44105500000023, + 63.002542000000176, + 58.6878429999997, + 65.81449100000009, + 66.71331000000009, + 66.4977799999997, + 66.24491300000045, + 65.92878699999983, + 65.76404999999977, + 65.47709599999962, + 62.07636399999956, + 65.33972200000062 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 281.433602000001, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 79.53985499999999, + "ttfb": 78.18794799999978, + "bytes": 6286, + "wallMs": 82.336996, + "cpuMs": 69.95 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 101.90315899999996, + "requestsPerSecond": 157.01181550220642, + "p50Ms": 5.71544700000004, + "p95Ms": 12.421798999999737, + "maxMs": 12.421798999999737, + "ttfbP95Ms": 11.615162999999939, + "cpuMs": 160.171, + "cpuMsPerRequest": 10.0106875, + "peakRssMiB": 138.71484375, + "eventLoopP95Ms": 11.526143, + "wireBytes": 100576, + "latenciesMs": [ + 8.021468999999797, + 6.076688000000104, + 6.17977000000019, + 6.194285000000036, + 6.2266209999997955, + 6.949910000000273, + 5.575685000000249, + 5.980379999999968, + 4.994564999999966, + 4.82878699999992, + 5.528239000000212, + 12.421798999999737, + 5.71544700000004, + 5.007136000000173, + 4.84965800000009, + 5.210497999999916 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 86.47030700000005, + "requestsPerSecond": 185.03461540850077, + "p50Ms": 5.227884999999787, + "p95Ms": 6.492397999999866, + "maxMs": 6.492397999999866, + "ttfbP95Ms": 6.306712000000061, + "cpuMs": 113.719, + "cpuMsPerRequest": 7.1074375, + "peakRssMiB": 142.8046875, + "eventLoopP95Ms": 10.936319, + "wireBytes": 100576, + "latenciesMs": [ + 6.492397999999866, + 5.293896000000132, + 5.008808000000045, + 5.281438999999864, + 5.4186210000002575, + 5.054180999999971, + 5.032904000000144, + 5.111915999999837, + 5.470138000000134, + 5.015387999999803, + 5.276859999999942, + 5.56667299999981, + 5.181562000000213, + 5.227884999999787, + 5.267329000000245, + 5.150033000000349 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 165.1084780000001, + "requestsPerSecond": 193.8119737255405, + "p50Ms": 39.19161200000008, + "p95Ms": 60.14482700000008, + "maxMs": 66.08977600000026, + "ttfbP95Ms": 59.96271800000022, + "cpuMs": 246.082, + "cpuMsPerRequest": 7.6900625, + "peakRssMiB": 158.7734375, + "eventLoopP95Ms": 15.794175, + "wireBytes": 201152, + "latenciesMs": [ + 20.61105499999985, + 26.209695999999894, + 31.539303000000018, + 37.98615800000016, + 45.227052999999614, + 53.47724300000027, + 40.49437399999988, + 60.14482700000008, + 40.607784000000265, + 66.08977600000026, + 42.18528500000002, + 41.526562999999896, + 41.11293300000034, + 40.61631499999976, + 40.00568299999986, + 39.99169200000006, + 39.73952700000018, + 39.641607999999906, + 38.65023799999972, + 38.77045300000009, + 38.81013299999995, + 38.55282399999987, + 39.1183259999998, + 39.244756999999936, + 39.32890099999986, + 39.19161200000008, + 38.578344000000016, + 36.453989999999976, + 34.88242600000012, + 28.676728000000367, + 23.947413000000324, + 23.510385000000042 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 149.8725169999998, + "requestsPerSecond": 213.51479671219536, + "p50Ms": 36.01498999999967, + "p95Ms": 41.72019399999999, + "maxMs": 42.678421999999955, + "ttfbP95Ms": 41.498145999999906, + "cpuMs": 212.169, + "cpuMsPerRequest": 6.63028125, + "peakRssMiB": 174.546875, + "eventLoopP95Ms": 14.868479, + "wireBytes": 201152, + "latenciesMs": [ + 34.07527900000014, + 34.447779999999966, + 34.979331, + 35.47342299999991, + 35.883902000000035, + 37.96749799999998, + 38.549019000000044, + 39.012537000000066, + 36.92280600000004, + 36.912131000000045, + 36.25236599999971, + 37.53147099999978, + 36.89942400000018, + 36.396545999999944, + 41.696766000000025, + 41.72019399999999, + 36.01498999999967, + 36.05550299999959, + 36.12835899999982, + 36.15228399999978, + 36.222495999999865, + 42.678421999999955, + 35.68483900000001, + 35.70598199999995, + 33.92410400000017, + 33.63892200000009, + 33.2905410000003, + 33.00348800000029, + 34.245928999999705, + 31.625230999999985, + 30.66823099999965, + 32.44295199999988 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 172.54823699999906, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 879.7754189999996, + "ttfb": 878.230513, + "bytes": 6286, + "wallMs": 884.7913159999998, + "cpuMs": 475.511 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 156.6060779999998, + "requestsPerSecond": 102.16717131502406, + "p50Ms": 9.323019999999815, + "p95Ms": 11.718078000000332, + "maxMs": 11.718078000000332, + "ttfbP95Ms": 10.72598700000026, + "cpuMs": 198.594, + "cpuMsPerRequest": 12.412125, + "peakRssMiB": 145.4765625, + "eventLoopP95Ms": 11.313151, + "wireBytes": 100576, + "latenciesMs": [ + 10.33747399999993, + 10.820713999999953, + 11.025404999999864, + 9.323019999999815, + 11.718078000000332, + 10.674735000000055, + 10.038270000000011, + 9.566029000000071, + 7.46641099999988, + 8.354878999999983, + 9.098030000000108, + 8.265396000000237, + 8.908395999999811, + 8.561231000000134, + 8.297011999999995, + 9.402012999999897 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 148.01493000000028, + "requestsPerSecond": 108.09720343751789, + "p50Ms": 8.599227000000155, + "p95Ms": 11.55357499999991, + "maxMs": 11.55357499999991, + "ttfbP95Ms": 10.980941999999686, + "cpuMs": 163.364, + "cpuMsPerRequest": 10.21025, + "peakRssMiB": 147.53515625, + "eventLoopP95Ms": 11.108351, + "wireBytes": 100576, + "latenciesMs": [ + 11.55357499999991, + 10.600893999999698, + 9.23936300000014, + 8.586727999999766, + 8.385188999999627, + 8.281301999999869, + 8.433161000000382, + 8.276829000000362, + 10.047660000000178, + 8.756970000000365, + 8.599227000000155, + 9.185516000000007, + 9.12437299999965, + 8.113334000000123, + 8.8772170000002, + 8.406860999999935 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 258.02416700000003, + "requestsPerSecond": 124.01939078830549, + "p50Ms": 64.45646799999986, + "p95Ms": 93.39620299999979, + "maxMs": 102.49827800000003, + "ttfbP95Ms": 93.11734999999999, + "cpuMs": 300.322, + "cpuMsPerRequest": 9.3850625, + "peakRssMiB": 151.65625, + "eventLoopP95Ms": 19.267583, + "wireBytes": 201152, + "latenciesMs": [ + 40.31627500000013, + 48.294444999999996, + 57.60730999999987, + 66.76932299999999, + 75.44116099999974, + 84.6879170000002, + 93.39620299999979, + 64.15609900000027, + 102.49827800000003, + 65.85769500000015, + 66.11125100000027, + 65.83395500000006, + 65.30068400000027, + 64.27617899999996, + 64.22699499999999, + 64.71407899999986, + 64.5945770000003, + 64.99373300000025, + 65.59339199999977, + 65.64182600000004, + 64.45646799999986, + 64.58089400000017, + 65.3690029999998, + 63.72025200000007, + 63.34532399999989, + 60.177228000000014, + 54.72831500000029, + 48.796804000000066, + 44.14968200000021, + 37.966883999999936, + 30.294962999999825, + 24.289252999999917 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 299.59296200000017, + "requestsPerSecond": 106.81158791707524, + "p50Ms": 53.47797899999978, + "p95Ms": 111.99580700000024, + "maxMs": 127.09059899999966, + "ttfbP95Ms": 111.56461100000024, + "cpuMs": 267.498, + "cpuMsPerRequest": 8.3593125, + "peakRssMiB": 155.0078125, + "eventLoopP95Ms": 36.732927, + "wireBytes": 201152, + "latenciesMs": [ + 42.664944000000105, + 43.40931499999988, + 44.43190299999969, + 45.19053799999983, + 45.92683799999986, + 46.68180500000017, + 51.35650799999985, + 52.14519300000029, + 51.93900799999983, + 51.61862599999995, + 51.41233599999987, + 51.55518200000006, + 51.68837799999983, + 51.847044000000096, + 53.32340299999987, + 53.47797899999978, + 79.75426299999981, + 79.78441599999996, + 80.02597800000012, + 79.9324230000002, + 79.64080400000012, + 79.39493399999992, + 78.74385600000005, + 127.09059899999966, + 111.97358399999985, + 111.85025099999984, + 111.48927800000001, + 111.2284380000001, + 111.09866499999998, + 110.88971600000013, + 111.99580700000024, + 64.66869499999984 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617543802 + }, + "results": { + "blobs": 1, + "originalBytes": 16533, + "storedBytes": 6286, + "allocatedBytes": 8192, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617544192 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 32917, + "ms": 13.802236999999877, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 5.287956000000122, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 8.755423999999948, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 16533, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 6286, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 73.13687299999992, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 95.80201899999975, + "ttfb": 73.72871600000008, + "bytes": 100827, + "wallMs": 103.59813099999974, + "cpuMs": 248.619 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 869.9077360000001, + "requestsPerSecond": 18.39275515995641, + "p50Ms": 53.09556199999997, + "p95Ms": 60.06115699999964, + "maxMs": 60.06115699999964, + "ttfbP95Ms": 43.12581999999975, + "cpuMs": 688.204, + "cpuMsPerRequest": 43.01275, + "peakRssMiB": 164.0859375, + "eventLoopP95Ms": 13.631487, + "wireBytes": 1613232, + "latenciesMs": [ + 56.4509979999998, + 52.875242999999955, + 53.31442199999992, + 53.09556199999997, + 52.39805999999999, + 52.5903959999996, + 51.2363620000001, + 52.71720800000003, + 53.9867049999998, + 55.603262000000086, + 55.11669200000006, + 52.858856999999716, + 54.64185499999985, + 54.949175000000196, + 60.06115699999964, + 52.81957999999986 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 839.6099490000001, + "requestsPerSecond": 19.056467850406566, + "p50Ms": 51.70401600000014, + "p95Ms": 64.02597699999978, + "maxMs": 64.02597699999978, + "ttfbP95Ms": 40.75072, + "cpuMs": 624.514, + "cpuMsPerRequest": 39.032125, + "peakRssMiB": 183.7734375, + "eventLoopP95Ms": 12.738559, + "wireBytes": 1613232, + "latenciesMs": [ + 51.70401600000014, + 51.32647799999995, + 55.849157000000105, + 64.02597699999978, + 51.12225699999999, + 54.2794100000001, + 48.94787300000007, + 47.46126699999968, + 48.496924000000035, + 48.54943299999968, + 51.72801400000026, + 51.618289000000004, + 52.711647000000085, + 52.646164000000226, + 52.55387500000052, + 53.11630299999979 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 559.4601080000002, + "requestsPerSecond": 57.19800132737969, + "p50Ms": 136.7615480000004, + "p95Ms": 155.03316499999983, + "maxMs": 157.81267500000013, + "ttfbP95Ms": 104.13819299999977, + "cpuMs": 1190.382, + "cpuMsPerRequest": 37.1994375, + "peakRssMiB": 225.90625, + "eventLoopP95Ms": 62.390271, + "wireBytes": 3226464, + "latenciesMs": [ + 141.54615400000057, + 147.20098199999939, + 147.99005099999977, + 154.5421320000005, + 154.83311200000026, + 155.03316499999983, + 155.01425300000028, + 157.81267500000013, + 135.16240800000014, + 141.42664700000023, + 136.7615480000004, + 146.54292999999961, + 136.9200609999998, + 141.1078779999998, + 145.74132100000043, + 145.82053300000007, + 136.6679269999995, + 124.49823199999992, + 128.78414499999963, + 133.84427200000027, + 140.7793760000004, + 131.96731099999943, + 132.23840399999972, + 137.25260400000025, + 125.16279399999985, + 135.20623199999955, + 128.00492099999974, + 119.24558399999933, + 125.98275000000012, + 122.34181700000045, + 125.82644600000003, + 124.61079900000004 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 541.6549340000001, + "requestsPerSecond": 59.07820272897208, + "p50Ms": 123.33046800000011, + "p95Ms": 161.4365600000001, + "maxMs": 170.00646600000073, + "ttfbP95Ms": 119.1730520000001, + "cpuMs": 1328.996, + "cpuMsPerRequest": 41.531125, + "peakRssMiB": 240.3828125, + "eventLoopP95Ms": 68.222975, + "wireBytes": 3226464, + "latenciesMs": [ + 129.78709200000048, + 138.7818040000002, + 141.09812500000044, + 142.03352099999938, + 149.0257499999998, + 149.88276899999983, + 153.1178770000006, + 154.16995000000043, + 151.19255599999997, + 143.80318799999986, + 170.00646600000073, + 161.4365600000001, + 160.06245500000023, + 152.7626879999998, + 155.0015570000005, + 153.39994399999978, + 119.90813199999957, + 119.36118299999998, + 118.88053200000013, + 123.33046800000011, + 121.26963999999953, + 120.34529500000008, + 123.32545399999981, + 119.54817600000024, + 111.53730700000051, + 107.11324700000023, + 109.57465800000045, + 109.05057500000021, + 115.96185400000013, + 112.50105200000053, + 111.43276999999944, + 115.49481500000002 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 312.2484880000038, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 105.38142600000037, + "ttfb": 88.61028100000021, + "bytes": 100827, + "wallMs": 110.51092699999981, + "cpuMs": 265.673 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 587.7997729999997, + "requestsPerSecond": 27.220153417786378, + "p50Ms": 36.88744799999995, + "p95Ms": 39.922027999999955, + "maxMs": 39.922027999999955, + "ttfbP95Ms": 22.11343500000021, + "cpuMs": 733.995, + "cpuMsPerRequest": 45.8746875, + "peakRssMiB": 169.18359375, + "eventLoopP95Ms": 13.189119, + "wireBytes": 1613232, + "latenciesMs": [ + 39.772512000000006, + 38.2362320000002, + 37.83000200000015, + 37.34928400000035, + 37.926312999999936, + 37.81692999999996, + 36.71753499999977, + 39.922027999999955, + 36.88744799999995, + 33.706089999999676, + 33.5373010000003, + 31.727155999999923, + 35.83442699999978, + 32.70712700000013, + 34.06613800000014, + 38.77614200000016 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 554.6769850000001, + "requestsPerSecond": 28.845617237931727, + "p50Ms": 34.48456699999997, + "p95Ms": 40.127422000000024, + "maxMs": 40.127422000000024, + "ttfbP95Ms": 20.56121600000006, + "cpuMs": 654.594, + "cpuMsPerRequest": 40.912125, + "peakRssMiB": 192.9921875, + "eventLoopP95Ms": 13.139967, + "wireBytes": 1613232, + "latenciesMs": [ + 34.50448400000005, + 33.965224000000035, + 31.67116699999997, + 33.42199599999958, + 34.62928799999963, + 34.48456699999997, + 35.33199800000011, + 32.624585000000025, + 33.12322600000016, + 32.49193800000012, + 34.80625700000019, + 40.127422000000024, + 37.22614500000009, + 32.51155800000015, + 35.16067599999997, + 35.17400899999984 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 517.2880919999998, + "requestsPerSecond": 61.861079918305975, + "p50Ms": 129.34000500000002, + "p95Ms": 161.80427700000018, + "maxMs": 166.17294300000003, + "ttfbP95Ms": 104.84498200000007, + "cpuMs": 1383.174, + "cpuMsPerRequest": 43.2241875, + "peakRssMiB": 230.2421875, + "eventLoopP95Ms": 19.021823, + "wireBytes": 3226464, + "latenciesMs": [ + 109.49904800000013, + 114.73385000000007, + 129.34000500000002, + 129.95545300000003, + 130.30290300000024, + 134.83302600000025, + 161.80427700000018, + 166.17294300000003, + 123.72986700000001, + 121.04546299999993, + 116.54467899999963, + 124.99005999999963, + 130.33221300000014, + 140.64443600000004, + 122.45979699999998, + 140.54233999999997, + 141.48673599999984, + 152.5742369999998, + 144.09581099999969, + 143.3734500000005, + 138.73172599999998, + 134.2846129999998, + 134.10060300000032, + 145.3835699999995, + 115.69415799999933, + 112.60408499999994, + 101.15306899999996, + 104.37958600000002, + 110.36428399999932, + 94.19838499999969, + 88.76543399999991, + 60.34289400000034 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 430.76730399999997, + "requestsPerSecond": 74.28604655658825, + "p50Ms": 105.55997200000002, + "p95Ms": 119.21280999999999, + "maxMs": 126.46339400000033, + "ttfbP95Ms": 73.54944100000012, + "cpuMs": 1106.536, + "cpuMsPerRequest": 34.57925, + "peakRssMiB": 230.796875, + "eventLoopP95Ms": 19.038207, + "wireBytes": 3226464, + "latenciesMs": [ + 105.77496900000006, + 109.99773699999969, + 111.7708990000001, + 114.5931070000006, + 115.00761800000055, + 115.53823799999918, + 118.25505200000043, + 119.21280999999999, + 92.01039300000048, + 99.38316699999996, + 96.73700699999972, + 102.25704000000042, + 105.91379200000029, + 102.902153, + 111.06911899999977, + 108.2577680000004, + 99.9016589999992, + 103.49783599999955, + 106.17882199999985, + 108.99076499999956, + 105.55997200000002, + 109.67650800000047, + 110.37908299999981, + 126.46339400000033, + 103.73749299999963, + 103.97886699999981, + 103.00298699999985, + 95.8691289999997, + 96.35557699999936, + 92.97247900000002, + 88.95579999999973, + 74.25139200000012 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 294.56420600000547, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 646.386696, + "ttfb": 642.8989670000001, + "bytes": 100827, + "wallMs": 656.430065, + "cpuMs": 308.658 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 212.7672910000001, + "requestsPerSecond": 75.19952867191411, + "p50Ms": 12.59686899999997, + "p95Ms": 16.087520999999924, + "maxMs": 16.087520999999924, + "ttfbP95Ms": 11.779324000000088, + "cpuMs": 252.909, + "cpuMsPerRequest": 15.8068125, + "peakRssMiB": 148.828125, + "eventLoopP95Ms": 11.796479, + "wireBytes": 1613232, + "latenciesMs": [ + 16.087520999999924, + 13.785617000000002, + 14.582091000000219, + 12.59686899999997, + 14.224471999999878, + 13.552986000000146, + 12.96895799999993, + 12.054253000000244, + 11.987439999999879, + 13.593289999999797, + 10.648236999999881, + 12.209675999999945, + 12.064523000000008, + 11.918353000000025, + 12.835344999999961, + 12.29594700000007 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 198.19014799999968, + "requestsPerSecond": 80.73055175275425, + "p50Ms": 11.923604000000068, + "p95Ms": 13.221050999999989, + "maxMs": 13.221050999999989, + "ttfbP95Ms": 10.625923000000057, + "cpuMs": 216.809, + "cpuMsPerRequest": 13.5505625, + "peakRssMiB": 157.078125, + "eventLoopP95Ms": 11.436031, + "wireBytes": 1613232, + "latenciesMs": [ + 11.297544000000016, + 13.168618000000151, + 12.088580000000093, + 12.494293000000198, + 11.509837000000061, + 12.86317500000041, + 11.531995000000279, + 11.909709999999905, + 12.108237999999801, + 10.91396500000019, + 11.923604000000068, + 12.061368999999559, + 11.824232999999822, + 13.169957000000068, + 13.221050999999989, + 11.816595999999663 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 440.2919949999996, + "requestsPerSecond": 72.67904109862373, + "p50Ms": 104.21473200000037, + "p95Ms": 164.94882199999984, + "maxMs": 187.22626100000025, + "ttfbP95Ms": 163.08054000000038, + "cpuMs": 673.016, + "cpuMsPerRequest": 21.03175, + "peakRssMiB": 169.8671875, + "eventLoopP95Ms": 36.077567, + "wireBytes": 3226464, + "latenciesMs": [ + 46.512827000000016, + 60.51926000000003, + 79.41832400000021, + 93.64823700000034, + 105.28075400000034, + 117.6862699999997, + 164.94882199999984, + 141.8585810000004, + 187.22626100000025, + 142.6523159999997, + 137.29987699999947, + 135.53709700000036, + 134.442051, + 135.83598100000017, + 100.09121899999991, + 96.62924300000032, + 96.40331700000024, + 96.77833199999986, + 120.27985999999964, + 118.26037400000041, + 116.6856399999997, + 112.89906400000018, + 110.98955500000011, + 104.47035199999937, + 104.21473200000037, + 101.40636600000016, + 72.75678999999946, + 68.43157599999995, + 63.74475200000052, + 59.80641199999991, + 55.13518699999986, + 49.373812000000726 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 274.89566899999954, + "requestsPerSecond": 116.4077997896724, + "p50Ms": 63.30544199999986, + "p95Ms": 91.03249600000072, + "maxMs": 91.43799500000023, + "ttfbP95Ms": 89.97069400000055, + "cpuMs": 455.496, + "cpuMsPerRequest": 14.23425, + "peakRssMiB": 171.15625, + "eventLoopP95Ms": 19.070975, + "wireBytes": 3226464, + "latenciesMs": [ + 38.910493999999744, + 40.269273999999314, + 42.14719699999932, + 43.97403899999972, + 45.70063500000015, + 47.54384200000004, + 49.48730599999999, + 55.960793000000194, + 75.17318700000033, + 75.17994799999997, + 74.81327400000009, + 74.6645010000002, + 74.44212599999992, + 74.1140749999995, + 73.68217400000049, + 71.28338299999996, + 52.379817, + 52.38806399999976, + 52.41818400000011, + 52.43600399999923, + 52.519444000000476, + 52.711679000000004, + 52.76885299999958, + 63.30544199999986, + 91.43799500000023, + 91.03249600000072, + 90.63942000000043, + 90.13666699999976, + 89.66485399999965, + 87.31913799999984, + 90.3381930000005, + 82.31320900000082 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "activeReaders": 1, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617559063 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "activeReaders": 0, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": null + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 35.039422999999715, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 13.608482000000095, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 5.256451000000197, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 70.72372799999994, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 116.8999490000001, + "ttfb": 99.54208599999993, + "bytes": 100797, + "wallMs": 122.65588800000023, + "cpuMs": 293.975 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 893.8890809999998, + "requestsPerSecond": 17.89931249870587, + "p50Ms": 54.94163200000003, + "p95Ms": 59.72431099999994, + "maxMs": 59.72431099999994, + "ttfbP95Ms": 42.621152000000166, + "cpuMs": 712.649, + "cpuMsPerRequest": 44.5405625, + "peakRssMiB": 174.5390625, + "eventLoopP95Ms": 16.891903, + "wireBytes": 1612752, + "latenciesMs": [ + 56.45987000000014, + 54.143209999999726, + 56.299169999999776, + 59.56328900000017, + 59.72431099999994, + 56.34924600000022, + 58.040097999999944, + 58.11941799999977, + 54.72889600000008, + 54.94163200000003, + 56.00884899999983, + 53.1099250000002, + 52.97996599999988, + 52.67511400000012, + 52.917495000000145, + 53.276680999999826 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 936.7822910000004, + "requestsPerSecond": 17.079742170318198, + "p50Ms": 57.16839700000037, + "p95Ms": 67.15192799999977, + "maxMs": 67.15192799999977, + "ttfbP95Ms": 48.6836059999996, + "cpuMs": 733.295, + "cpuMsPerRequest": 45.8309375, + "peakRssMiB": 202.79296875, + "eventLoopP95Ms": 18.202623, + "wireBytes": 1612752, + "latenciesMs": [ + 51.69158299999981, + 52.437131000000136, + 59.08163599999989, + 67.15192799999977, + 63.427607000000535, + 61.294801999999436, + 56.602482000000236, + 54.69466299999931, + 57.16839700000037, + 61.44023200000083, + 56.93695099999968, + 58.227208000000246, + 55.741439999999784, + 56.511765000000196, + 60.59228299999995, + 59.89722499999971 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 667.6138419999997, + "requestsPerSecond": 47.93190012977594, + "p50Ms": 175.9830750000001, + "p95Ms": 191.02433099999962, + "maxMs": 191.14003200000025, + "ttfbP95Ms": 137.58690600000045, + "cpuMs": 1490.778, + "cpuMsPerRequest": 46.5868125, + "peakRssMiB": 253.86328125, + "eventLoopP95Ms": 73.793535, + "wireBytes": 3225504, + "latenciesMs": [ + 177.67945099999997, + 178.42606700000033, + 185.96582900000067, + 185.19750999999997, + 185.3737000000001, + 186.1042520000001, + 191.02433099999962, + 191.14003200000025, + 168.9699129999999, + 172.27552599999945, + 181.77160300000014, + 175.38395200000014, + 174.92761100000007, + 171.94374400000015, + 175.9830750000001, + 173.10474000000067, + 160.92241000000013, + 180.7830359999998, + 176.63806700000077, + 179.420975, + 180.45143199999984, + 179.55292999999983, + 177.89438700000028, + 179.7820839999995, + 145.19967700000052, + 122.64307100000042, + 122.32889299999988, + 123.97889399999985, + 122.39087299999937, + 121.10103999999956, + 120.5534149999994, + 122.54278699999941 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 499.09398299999975, + "requestsPerSecond": 64.11618069937745, + "p50Ms": 119.0977469999998, + "p95Ms": 143.45546399999967, + "maxMs": 147.16232499999933, + "ttfbP95Ms": 110.22644299999956, + "cpuMs": 1046.166, + "cpuMsPerRequest": 32.6926875, + "peakRssMiB": 244.99609375, + "eventLoopP95Ms": 75.104255, + "wireBytes": 3225504, + "latenciesMs": [ + 106.90913799999998, + 108.84290899999996, + 110.35235299999931, + 117.19556199999988, + 116.87210200000027, + 118.42880100000002, + 118.30252399999972, + 119.0977469999998, + 98.43070799999987, + 98.22374199999922, + 104.56610499999988, + 98.40793600000052, + 98.90329800000018, + 98.81217199999992, + 98.94329099999959, + 99.51898399999936, + 140.75345300000026, + 143.45546399999967, + 136.5248849999998, + 138.96656600000006, + 137.98076199999923, + 139.33105299999988, + 139.73248599999988, + 139.72101900000052, + 147.16232499999933, + 142.3872079999992, + 141.8779429999995, + 141.4044899999999, + 140.2882129999998, + 138.06607799999983, + 139.56140699999924, + 142.2687449999994 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 539.862899000002, + "b0": 0, + "b1": 0, + "b2": 99, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 131.220961, + "ttfb": 115.31173100000024, + "bytes": 100797, + "wallMs": 136.52441899999985, + "cpuMs": 292.316 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 605.399293, + "requestsPerSecond": 26.428838264269334, + "p50Ms": 37.00617800000009, + "p95Ms": 47.813342000000375, + "maxMs": 47.813342000000375, + "ttfbP95Ms": 29.477032000000236, + "cpuMs": 737.245, + "cpuMsPerRequest": 46.0778125, + "peakRssMiB": 179.80859375, + "eventLoopP95Ms": 16.506879, + "wireBytes": 1612752, + "latenciesMs": [ + 47.813342000000375, + 44.76241600000003, + 38.547881999999845, + 37.00617800000009, + 37.879607000000306, + 35.838040999999976, + 31.532530999999835, + 35.857772999999725, + 35.650858999999855, + 32.09379199999967, + 33.60629299999982, + 38.87019999999984, + 36.7517270000003, + 37.12012199999981, + 38.728012000000035, + 38.994036999999935 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 603.6367690000002, + "requestsPerSecond": 26.50600629664426, + "p50Ms": 37.47974999999997, + "p95Ms": 40.46892700000035, + "maxMs": 40.46892700000035, + "ttfbP95Ms": 23.601472000000285, + "cpuMs": 698.372, + "cpuMsPerRequest": 43.64825, + "peakRssMiB": 211.74609375, + "eventLoopP95Ms": 17.891327, + "wireBytes": 1612752, + "latenciesMs": [ + 36.72168599999986, + 36.77871099999993, + 35.73253399999976, + 40.46892700000035, + 36.185505999999805, + 37.63821599999983, + 36.026606999999785, + 39.63057600000002, + 37.69239999999991, + 38.53399799999988, + 40.0107280000002, + 38.9684729999999, + 37.47974999999997, + 35.95625199999995, + 38.1692079999998, + 34.26667099999986 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 678.1881240000002, + "requestsPerSecond": 47.18454786742917, + "p50Ms": 154.0379899999998, + "p95Ms": 220.6992540000001, + "maxMs": 221.70138000000043, + "ttfbP95Ms": 145.14399500000036, + "cpuMs": 1494.61, + "cpuMsPerRequest": 46.7065625, + "peakRssMiB": 238.16015625, + "eventLoopP95Ms": 22.233087, + "wireBytes": 3225504, + "latenciesMs": [ + 150.1085350000003, + 155.59903600000007, + 175.55063900000005, + 176.46296299999995, + 177.32086100000015, + 206.00996900000064, + 220.6992540000001, + 221.70138000000043, + 192.74364400000013, + 196.83770800000002, + 181.53049999999985, + 185.3835650000001, + 194.3106110000008, + 190.06068700000014, + 197.16111100000035, + 196.6877489999997, + 141.22008499999993, + 145.55778100000043, + 151.9486909999996, + 147.9074729999993, + 143.85928799999965, + 144.14310899999964, + 130.56596100000024, + 135.54559999999947, + 150.4304489999995, + 155.17732100000012, + 153.32470999999987, + 154.0379899999998, + 150.56554400000005, + 132.13093599999956, + 125.38396300000022, + 120.30996400000004 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 577.1255920000003, + "requestsPerSecond": 55.447203249305886, + "p50Ms": 139.3372559999998, + "p95Ms": 168.53165500000068, + "maxMs": 174.98737400000027, + "ttfbP95Ms": 119.94108299999971, + "cpuMs": 1428.409, + "cpuMsPerRequest": 44.63778125, + "peakRssMiB": 236.15234375, + "eventLoopP95Ms": 22.806527, + "wireBytes": 3225504, + "latenciesMs": [ + 132.86674699999912, + 137.57817200000045, + 139.41168599999946, + 160.7042819999997, + 163.40870900000027, + 167.12621099999978, + 168.53165500000068, + 174.98737400000027, + 153.75102900000002, + 154.54496800000015, + 135.99645099999998, + 164.97681899999952, + 142.78760599999987, + 141.51846699999987, + 141.28582199999983, + 135.47124500000064, + 129.09328899999946, + 130.84830500000044, + 134.36860100000013, + 134.35918700000002, + 147.24521499999992, + 140.62065600000005, + 140.6569440000003, + 140.99406199999976, + 135.09668799999963, + 139.3372559999998, + 124.62400799999978, + 130.29040900000018, + 127.50879199999963, + 124.19532299999992, + 122.38892299999952, + 124.5484120000001 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 554.5716769999967, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 615.256656, + "ttfb": 612.2059160000003, + "bytes": 100797, + "wallMs": 624.5805479999999, + "cpuMs": 460.273 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 167.6944609999996, + "requestsPerSecond": 95.41161887273091, + "p50Ms": 9.495715999999902, + "p95Ms": 13.019096999999874, + "maxMs": 13.019096999999874, + "ttfbP95Ms": 9.759027999999944, + "cpuMs": 201.018, + "cpuMsPerRequest": 12.563625, + "peakRssMiB": 155.29296875, + "eventLoopP95Ms": 11.665407, + "wireBytes": 1612752, + "latenciesMs": [ + 13.019096999999874, + 12.692501999999877, + 11.165821999999935, + 10.945264999999836, + 11.41869799999995, + 10.700428000000102, + 9.539998999999625, + 9.492686999999933, + 9.481850000000122, + 9.376164999999673, + 9.667767999999796, + 9.280835999999908, + 9.45565600000009, + 9.495715999999902, + 8.869623000000047, + 9.397489999999834 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 150.62088300000005, + "requestsPerSecond": 106.22696986844775, + "p50Ms": 9.367345999999998, + "p95Ms": 9.800421999999799, + "maxMs": 9.800421999999799, + "ttfbP95Ms": 7.994881999999961, + "cpuMs": 163.535, + "cpuMsPerRequest": 10.2209375, + "peakRssMiB": 161.48046875, + "eventLoopP95Ms": 11.771903, + "wireBytes": 1612752, + "latenciesMs": [ + 9.437699000000066, + 9.411429000000226, + 9.800421999999799, + 9.088248999999905, + 8.736824999999953, + 9.114552999999887, + 9.528245999999854, + 8.620844000000034, + 9.61265800000001, + 9.745464999999967, + 8.699127000000317, + 9.367345999999998, + 9.569143000000167, + 9.481284999999843, + 9.162695999999869, + 8.426278999999795 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 270.66089200000033, + "requestsPerSecond": 118.22912340065723, + "p50Ms": 55.4738339999999, + "p95Ms": 102.83721400000013, + "maxMs": 112.36890699999958, + "ttfbP95Ms": 101.75972900000033, + "cpuMs": 285.601, + "cpuMsPerRequest": 8.92503125, + "peakRssMiB": 174.36328125, + "eventLoopP95Ms": 17.694719, + "wireBytes": 3225504, + "latenciesMs": [ + 35.124323000000004, + 41.841705999999704, + 49.4351029999998, + 57.108464999999796, + 63.629787999999735, + 96.28801499999963, + 102.83721400000013, + 78.77402299999994, + 112.36890699999958, + 80.07548600000018, + 81.14888199999996, + 85.99165499999981, + 81.26578000000018, + 55.15051399999993, + 56.437077000000045, + 56.253589999999804, + 56.07690400000001, + 55.2958279999998, + 54.57916699999987, + 54.77611199999956, + 55.29938399999992, + 54.61653499999966, + 53.63689999999997, + 54.53233999999975, + 55.4738339999999, + 57.187167000000045, + 58.15084500000012, + 56.418547999999646, + 55.47138200000063, + 53.41909899999973, + 50.555255000000216, + 44.90891699999975 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 336.348661, + "requestsPerSecond": 95.13937086849292, + "p50Ms": 64.78164000000015, + "p95Ms": 137.94554499999958, + "maxMs": 153.08490600000005, + "ttfbP95Ms": 136.4501879999998, + "cpuMs": 312.912, + "cpuMsPerRequest": 9.7785, + "peakRssMiB": 187.25390625, + "eventLoopP95Ms": 46.956543, + "wireBytes": 3225504, + "latenciesMs": [ + 43.59515399999964, + 45.494682999999895, + 47.54584199999954, + 49.390416999999616, + 51.27837400000044, + 53.20743599999969, + 57.849380999999994, + 59.8212080000003, + 63.08760800000073, + 63.16521199999988, + 63.2144159999998, + 63.93855199999962, + 64.30067299999973, + 64.36383100000057, + 64.78164000000015, + 76.5045570000002, + 69.20112800000061, + 69.46615399999973, + 69.7310350000007, + 69.38834000000043, + 69.4853549999998, + 69.51611999999932, + 96.70538900000065, + 153.08490600000005, + 137.94554499999958, + 137.25532300000032, + 136.36852099999942, + 135.76439800000026, + 135.01744899999994, + 134.41015200000038, + 107.96453099999962, + 45.05526599999939 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617575556 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617575879 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 46.20526000000018, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 13.628688000000238, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 14.88720400000011, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 84.99760900000001, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2575.6483510000003, + "ttfb": 2419.016341, + "bytes": 799931, + "wallMs": 2627.613895, + "cpuMs": 3211.64 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4122.787964, + "requestsPerSecond": 3.88086899925761, + "p50Ms": 244.10771199999908, + "p95Ms": 298.7754100000002, + "maxMs": 298.7754100000002, + "ttfbP95Ms": 105.07743800000026, + "cpuMs": 5838.218, + "cpuMsPerRequest": 364.888625, + "peakRssMiB": 303.25390625, + "eventLoopP95Ms": 15.179775, + "wireBytes": 12798896, + "latenciesMs": [ + 298.7754100000002, + 239.198582, + 283.0165850000003, + 253.284361, + 233.8822629999995, + 243.7367320000003, + 282.95985400000063, + 261.44877799999995, + 261.7997099999993, + 238.65792800000054, + 243.6391820000008, + 244.10771199999908, + 240.96586500000012, + 265.1077409999998, + 231.32310399999915, + 296.02966899999956 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 3796.12961, + "requestsPerSecond": 4.214819208978484, + "p50Ms": 230.76322000000073, + "p95Ms": 299.38012999999955, + "maxMs": 299.38012999999955, + "ttfbP95Ms": 116.30424400000084, + "cpuMs": 6410.281, + "cpuMsPerRequest": 400.6425625, + "peakRssMiB": 309.421875, + "eventLoopP95Ms": 17.383423, + "wireBytes": 12798896, + "latenciesMs": [ + 218.0381610000004, + 242.1117950000007, + 236.6508049999993, + 225.0089429999989, + 224.33546600000045, + 212.82447000000138, + 231.36339600000065, + 229.95277499999975, + 229.59922199999892, + 219.13632999999936, + 246.08553100000063, + 299.38012999999955, + 257.837352999999, + 243.5312359999989, + 230.76322000000073, + 245.62632099999973 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2065.0274610000015, + "requestsPerSecond": 15.496161966051442, + "p50Ms": 464.1179490000013, + "p95Ms": 758.3639490000005, + "maxMs": 762.5012370000004, + "ttfbP95Ms": 373.2866049999993, + "cpuMs": 8497.76, + "cpuMsPerRequest": 265.555, + "peakRssMiB": 332.69140625, + "eventLoopP95Ms": 29.900799, + "wireBytes": 25597792, + "latenciesMs": [ + 530.7910389999997, + 561.4570349999995, + 615.2530940000015, + 636.233017999999, + 681.8859709999997, + 691.979088, + 758.3639490000005, + 762.5012370000004, + 495.16756799999894, + 523.6875060000002, + 505.59536000000116, + 498.13640099999975, + 509.2552020000003, + 504.28017700000055, + 453.5979389999993, + 535.2275559999998, + 464.1179490000013, + 467.7227389999989, + 456.13014999999905, + 458.8228770000005, + 431.9116990000002, + 455.69144099999903, + 458.37668700000177, + 435.5042080000003, + 416.65598599999976, + 427.51118400000087, + 385.7334099999989, + 399.19919799999843, + 363.69266499999867, + 369.74319000000105, + 381.7008210000022, + 321.6202369999992 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1865.7041309999986, + "requestsPerSecond": 17.15170131656852, + "p50Ms": 425.09928800000125, + "p95Ms": 681.2991679999977, + "maxMs": 694.2982740000007, + "ttfbP95Ms": 313.7703099999999, + "cpuMs": 8961.682, + "cpuMsPerRequest": 280.0525625, + "peakRssMiB": 326.6484375, + "eventLoopP95Ms": 24.477695, + "wireBytes": 25597792, + "latenciesMs": [ + 393.55079599999954, + 447.2447339999999, + 491.7806700000001, + 537.4373699999996, + 602.0341129999979, + 619.041874999999, + 681.2991679999977, + 694.2982740000007, + 456.4085150000028, + 450.1162460000014, + 451.81944400000066, + 425.09928800000125, + 422.32273500000156, + 405.09551099999953, + 394.17998499999885, + 418.93175300000075, + 375.1282519999986, + 382.28345400000035, + 386.75548100000015, + 416.18442100000175, + 412.4202240000013, + 455.57515499999863, + 434.8358619999999, + 436.18207299999995, + 442.6476730000031, + 455.4058320000004, + 443.09657700000025, + 420.6530820000007, + 381.5195780000031, + 352.0597480000033, + 339.33794300000227, + 327.7673289999984 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 5287.834006000005, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 93, + "b4": 4, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2703.7352640000004, + "ttfb": 2537.215699, + "bytes": 799931, + "wallMs": 2745.451017, + "cpuMs": 3533.3 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 3960.562809, + "requestsPerSecond": 4.039829885702489, + "p50Ms": 247.89467800000057, + "p95Ms": 271.566354999999, + "maxMs": 271.566354999999, + "ttfbP95Ms": 96.97661499999958, + "cpuMs": 7144.772, + "cpuMsPerRequest": 446.54825, + "peakRssMiB": 304.609375, + "eventLoopP95Ms": 11.247615, + "wireBytes": 12798896, + "latenciesMs": [ + 254.6050749999995, + 248.0974180000003, + 236.1919829999997, + 248.63632000000052, + 247.89467800000057, + 255.37378799999988, + 254.41821699999946, + 263.6576789999999, + 244.58647100000053, + 271.566354999999, + 242.80977499999972, + 246.9335570000003, + 257.38997800000107, + 243.38225299999976, + 199.17775500000062, + 240.90632600000026 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 3969.9660000000003, + "requestsPerSecond": 4.03026121634291, + "p50Ms": 246.34581699999944, + "p95Ms": 280.2313009999998, + "maxMs": 280.2313009999998, + "ttfbP95Ms": 104.0945789999987, + "cpuMs": 7540.87, + "cpuMsPerRequest": 471.304375, + "peakRssMiB": 304.890625, + "eventLoopP95Ms": 11.321343, + "wireBytes": 12798896, + "latenciesMs": [ + 280.2313009999998, + 257.8386500000015, + 268.22027100000014, + 239.78245799999968, + 248.11002499999995, + 241.45337999999902, + 251.031038000001, + 239.69070699999975, + 255.3994989999992, + 258.82392100000106, + 269.3970069999996, + 201.96262100000058, + 239.20345100000122, + 230.59521099999984, + 246.34581699999944, + 237.42055700000128 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2123.0768069999995, + "requestsPerSecond": 15.072464592186565, + "p50Ms": 483.28599399999985, + "p95Ms": 707.7050639999998, + "maxMs": 719.0060869999998, + "ttfbP95Ms": 409.63137300000017, + "cpuMs": 9640.463, + "cpuMsPerRequest": 301.26446875, + "peakRssMiB": 329.7734375, + "eventLoopP95Ms": 13.688831, + "wireBytes": 25597792, + "latenciesMs": [ + 524.2819039999995, + 562.693636, + 595.6110910000007, + 614.5475879999995, + 643.3254859999997, + 684.9432280000001, + 707.7050639999998, + 719.0060869999998, + 439.68947000000117, + 424.40427400000044, + 416.83193500000016, + 435.3422590000009, + 413.43916100000024, + 386.70267199999944, + 407.55726499999946, + 447.3451359999999, + 411.27978600000097, + 406.7036360000002, + 412.24087099999997, + 377.9756899999993, + 393.1870749999998, + 408.49500799999987, + 440.4220270000005, + 483.28599399999985, + 589.3038300000007, + 582.4083719999999, + 589.2080010000009, + 600.328356, + 591.3223919999982, + 553.1863550000016, + 533.8354940000008, + 499.3171480000001 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2249.785767999998, + "requestsPerSecond": 14.223576508996757, + "p50Ms": 495.6515730000028, + "p95Ms": 809.6027029999968, + "maxMs": 829.8294649999989, + "ttfbP95Ms": 443.0935239999999, + "cpuMs": 10322.395, + "cpuMsPerRequest": 322.57484375, + "peakRssMiB": 329.96875, + "eventLoopP95Ms": 13.156351, + "wireBytes": 25597792, + "latenciesMs": [ + 583.5228919999972, + 626.2199309999996, + 650.80026, + 690.7777380000007, + 725.8710449999999, + 755.1255310000015, + 809.6027029999968, + 829.8294649999989, + 606.0656049999998, + 590.0366179999983, + 584.9438039999986, + 603.140037000001, + 594.2320839999993, + 616.720781, + 592.0251790000002, + 592.4136479999979, + 425.17141499999707, + 422.95415299999877, + 428.66406199999983, + 445.51947700000164, + 450.4199060000028, + 470.0303780000031, + 484.5131169999986, + 485.2484609999992, + 495.6515730000028, + 476.94012700000167, + 461.5940320000009, + 439.9684320000015, + 417.50969500000065, + 377.16080299999885, + 353.9991560000017, + 339.80842699999994 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 5526.541965000013, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 93, + "b4": 6, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 3463.262249, + "ttfb": 3445.253607, + "bytes": 799931, + "wallMs": 3489.5407299999997, + "cpuMs": 3971.157 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 461.99570700000004, + "requestsPerSecond": 34.63235644308703, + "p50Ms": 27.98649800000021, + "p95Ms": 31.81088600000021, + "maxMs": 31.81088600000021, + "ttfbP95Ms": 10.531836000000112, + "cpuMs": 538.126, + "cpuMsPerRequest": 33.632875, + "peakRssMiB": 292.89453125, + "eventLoopP95Ms": 11.354111, + "wireBytes": 12798896, + "latenciesMs": [ + 31.81088600000021, + 31.758569999999963, + 29.5557289999997, + 28.01143199999933, + 29.73796399999992, + 29.781514000000243, + 27.507618999999977, + 26.516278000000057, + 28.789646000000175, + 27.644239999999627, + 27.124931999999717, + 28.12213200000042, + 26.997708000000785, + 27.533948999999666, + 27.892895999999382, + 27.98649800000021 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 324.96219700000074, + "requestsPerSecond": 49.23649626851816, + "p50Ms": 16.798999999999978, + "p95Ms": 43.09565400000065, + "maxMs": 43.09565400000065, + "ttfbP95Ms": 10.835165999999845, + "cpuMs": 700.288, + "cpuMsPerRequest": 43.768, + "peakRssMiB": 297.55078125, + "eventLoopP95Ms": 14.270463, + "wireBytes": 12798896, + "latenciesMs": [ + 31.648732999999993, + 43.09565400000065, + 16.296769999999924, + 15.779529999999795, + 16.221679000000222, + 16.193324000000757, + 22.022840000000542, + 27.55364599999939, + 16.798999999999978, + 15.850329000000784, + 16.802537999999913, + 16.074813000000177, + 16.921846000000187, + 16.863266999999723, + 17.035695999999916, + 16.557380000000194 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 499.83832800000073, + "requestsPerSecond": 64.0207007094501, + "p50Ms": 127.12264500000038, + "p95Ms": 161.87424999999985, + "maxMs": 174.647105, + "ttfbP95Ms": 79.17693400000007, + "cpuMs": 871.136, + "cpuMsPerRequest": 27.223, + "peakRssMiB": 309.92578125, + "eventLoopP95Ms": 17.367039, + "wireBytes": 25597792, + "latenciesMs": [ + 103.07294700000057, + 103.9893689999999, + 110.08082399999967, + 116.55434100000002, + 124.56952399999955, + 129.97801299999992, + 161.87424999999985, + 174.647105, + 140.94392199999947, + 140.35361900000044, + 138.99707500000022, + 137.65421800000058, + 135.53288599999996, + 134.27754000000004, + 106.924935, + 97.15028699999948, + 127.12264500000038, + 127.39489700000013, + 127.82050900000013, + 128.1301169999997, + 132.27835099999993, + 128.46495499999946, + 131.85094200000003, + 129.19325000000026, + 109.88288399999965, + 109.58871799999997, + 110.59725799999978, + 106.50980400000026, + 101.36760199999935, + 101.0481490000002, + 95.42120799999975, + 96.24089499999991 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 713.7802379999994, + "requestsPerSecond": 44.83172592402317, + "p50Ms": 175.60797300000013, + "p95Ms": 201.53002200000083, + "maxMs": 202.80123300000014, + "ttfbP95Ms": 93.3475610000005, + "cpuMs": 1244.678, + "cpuMsPerRequest": 38.8961875, + "peakRssMiB": 303.265625, + "eventLoopP95Ms": 25.509887, + "wireBytes": 25597792, + "latenciesMs": [ + 167.809929, + 169.2880100000002, + 170.85494500000004, + 173.51787700000023, + 173.85223100000076, + 174.41949999999997, + 175.00528599999961, + 175.60797300000013, + 177.55138499999975, + 185.36291900000015, + 184.63209499999994, + 183.7001110000001, + 183.6641320000008, + 183.55242200000066, + 183.5420349999995, + 186.49678900000072, + 143.1243200000008, + 144.0122649999994, + 144.6422590000002, + 145.29701900000146, + 145.9700580000008, + 153.15904899999987, + 152.93611999999848, + 158.47572299999956, + 193.4360230000002, + 202.80123300000014, + 201.53002200000083, + 200.41288099999838, + 199.31480399999964, + 198.23477899999853, + 196.58613699999842, + 191.10230799999954 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "activeReaders": 1, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617618250 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "activeReaders": 0, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": null + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 172.3018989999996, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 227.42965200000026, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2413.959531, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2745.102216, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2781.4064600000006, + "ttfb": 2609.6815110000002, + "bytes": 799783, + "wallMs": 2823.0658000000003, + "cpuMs": 3592.76 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4482.3913059999995, + "requestsPerSecond": 3.5695232539343147, + "p50Ms": 284.72552499999983, + "p95Ms": 319.4134919999997, + "maxMs": 319.4134919999997, + "ttfbP95Ms": 137.38314700000046, + "cpuMs": 6798.106, + "cpuMsPerRequest": 424.881625, + "peakRssMiB": 307.515625, + "eventLoopP95Ms": 12.058623, + "wireBytes": 12796528, + "latenciesMs": [ + 309.9071359999998, + 286.257439, + 258.6101600000002, + 232.02026699999988, + 246.64619800000037, + 244.44541500000014, + 268.8373899999997, + 274.5591999999997, + 289.1250679999994, + 275.4645280000004, + 284.72552499999983, + 316.94525000000067, + 297.5878439999997, + 286.13335800000095, + 319.4134919999997, + 286.931066000001 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4485.040632, + "requestsPerSecond": 3.5674147266008536, + "p50Ms": 278.0273780000007, + "p95Ms": 296.14282900000035, + "maxMs": 296.14282900000035, + "ttfbP95Ms": 111.75590000000011, + "cpuMs": 7729.091, + "cpuMsPerRequest": 483.0681875, + "peakRssMiB": 309.58203125, + "eventLoopP95Ms": 12.034047, + "wireBytes": 12796528, + "latenciesMs": [ + 295.5318729999999, + 296.14282900000035, + 295.03564200000073, + 288.84691999999995, + 276.27469700000074, + 278.7019879999989, + 289.9034359999987, + 270.13628600000084, + 271.42419100000006, + 279.2197610000003, + 277.344258000001, + 278.0273780000007, + 261.8116279999995, + 274.40103199999976, + 266.2161589999996, + 282.0233480000006 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2141.0946079999994, + "requestsPerSecond": 14.945626354125126, + "p50Ms": 482.2456760000023, + "p95Ms": 803.045728000001, + "maxMs": 879.0137809999978, + "ttfbP95Ms": 481.922872000001, + "cpuMs": 9999.464, + "cpuMsPerRequest": 312.48325, + "peakRssMiB": 337.00390625, + "eventLoopP95Ms": 27.574271, + "wireBytes": 25593056, + "latenciesMs": [ + 476.8522670000002, + 554.2442360000005, + 621.4111890000004, + 684.4691819999989, + 730.0285079999994, + 778.2618820000007, + 803.045728000001, + 879.0137809999978, + 482.2456760000023, + 447.0257010000005, + 470.1910289999996, + 498.2072599999992, + 504.88768300000083, + 500.753854999999, + 496.15841100000034, + 485.4731410000022, + 456.2937559999991, + 473.383471000001, + 477.61417399999846, + 477.3965070000013, + 433.8570230000005, + 463.9175909999976, + 530.9504240000024, + 517.9386400000003, + 494.28661000000284, + 486.9270580000011, + 442.5020889999978, + 390.05183599999873, + 394.7592850000001, + 326.8974610000005, + 258.7615459999979, + 247.85073900000134 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2324.9689279999984, + "requestsPerSecond": 13.763624801440796, + "p50Ms": 559.8909910000002, + "p95Ms": 836.3898179999997, + "maxMs": 912.6414199999999, + "ttfbP95Ms": 429.7801780000009, + "cpuMs": 8598.7, + "cpuMsPerRequest": 268.709375, + "peakRssMiB": 342.63671875, + "eventLoopP95Ms": 28.033023, + "wireBytes": 25593056, + "latenciesMs": [ + 376.9471450000019, + 455.00155599999925, + 559.8909910000002, + 634.9950289999979, + 698.0007299999997, + 742.6326489999992, + 836.3898179999997, + 912.6414199999999, + 608.4873059999991, + 644.7856079999983, + 695.1888529999997, + 799.011859000002, + 817.4046509999971, + 799.0913930000024, + 787.8983169999992, + 782.5243020000016, + 730.1263330000002, + 719.5967750000018, + 664.2293360000003, + 488.5165629999974, + 473.8543260000006, + 494.21750599999723, + 415.9266510000016, + 412.6783570000007, + 398.21474399999715, + 326.8878960000002, + 286.59776599999896, + 290.2187589999994, + 252.5030770000012, + 232.56980400000248, + 231.87445300000036, + 215.20407899999918 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 9218.78453700002, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 85, + "b4": 14, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2500.104259, + "ttfb": 2322.402918, + "bytes": 799783, + "wallMs": 2534.616385, + "cpuMs": 3485.874 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4574.070046, + "requestsPerSecond": 3.4979787889326084, + "p50Ms": 284.4262120000003, + "p95Ms": 337.7844420000001, + "maxMs": 337.7844420000001, + "ttfbP95Ms": 125.23205400000006, + "cpuMs": 7755.117, + "cpuMsPerRequest": 484.6948125, + "peakRssMiB": 313.71875, + "eventLoopP95Ms": 11.706367, + "wireBytes": 12796528, + "latenciesMs": [ + 295.9900690000004, + 266.38597800000025, + 286.86295299999983, + 296.3177430000005, + 304.06737800000064, + 296.5736589999997, + 246.27473999999984, + 278.23645099999976, + 297.62659299999905, + 266.5747059999994, + 284.4262120000003, + 265.2382239999988, + 291.3668669999988, + 337.7844420000001, + 279.3917270000002, + 275.61703900000066 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4331.449114999999, + "requestsPerSecond": 3.6939138785196146, + "p50Ms": 270.15945999999894, + "p95Ms": 303.9903050000012, + "maxMs": 303.9903050000012, + "ttfbP95Ms": 113.9297119999992, + "cpuMs": 7958.024, + "cpuMsPerRequest": 497.3765, + "peakRssMiB": 313.91796875, + "eventLoopP95Ms": 11.313151, + "wireBytes": 12796528, + "latenciesMs": [ + 261.8956760000001, + 258.72715699999935, + 274.5757759999997, + 264.1857179999988, + 300.7414280000012, + 270.15945999999894, + 269.2778930000004, + 303.9903050000012, + 291.38640099999975, + 232.9205350000011, + 241.76410100000066, + 284.1440160000002, + 275.1357169999992, + 255.10444599999937, + 270.81375599999956, + 272.55286799999885 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2298.961175999999, + "requestsPerSecond": 13.919330319304189, + "p50Ms": 495.9227229999997, + "p95Ms": 913.9996300000003, + "maxMs": 940.2759249999999, + "ttfbP95Ms": 565.8722269999998, + "cpuMs": 11007.3, + "cpuMsPerRequest": 343.978125, + "peakRssMiB": 353.15625, + "eventLoopP95Ms": 13.664255, + "wireBytes": 25593056, + "latenciesMs": [ + 552.3434809999999, + 612.5204369999992, + 663.4116049999993, + 740.1997150000007, + 802.6081599999998, + 865.3377140000011, + 913.9996300000003, + 940.2759249999999, + 617.1313589999991, + 590.7243820000003, + 592.3652299999994, + 542.2112679999991, + 518.822424, + 485.74447599999985, + 495.9227229999997, + 505.45571700000073, + 386.97612599999775, + 377.64100300000246, + 367.18699000000015, + 397.56104400000004, + 391.86263900000085, + 394.06179099999827, + 361.86117300000114, + 415.7522739999986, + 494.6427580000018, + 507.55863600000157, + 510.3281539999989, + 469.23135999999795, + 448.3028590000031, + 456.7878500000006, + 472.49770799999897, + 430.9439110000021 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2054.876971999998, + "requestsPerSecond": 15.572708457019989, + "p50Ms": 457.7118760000012, + "p95Ms": 806.6677500000005, + "maxMs": 832.6120770000016, + "ttfbP95Ms": 505.0034990000022, + "cpuMs": 10427.031, + "cpuMsPerRequest": 325.84471875, + "peakRssMiB": 346.234375, + "eventLoopP95Ms": 14.188543, + "wireBytes": 25593056, + "latenciesMs": [ + 439.4290890000011, + 486.7737280000001, + 556.2074599999978, + 632.0584070000004, + 707.3788290000011, + 748.6112059999978, + 806.6677500000005, + 832.6120770000016, + 460.2754240000031, + 491.2615489999989, + 457.7118760000012, + 445.7687010000009, + 414.8105200000027, + 399.74555300000065, + 383.1854349999994, + 411.89870299999893, + 409.1029540000018, + 384.54246200000125, + 391.588753, + 391.02018300000054, + 444.60400500000105, + 466.2269309999974, + 473.2671980000014, + 497.94002900000123, + 465.16507600000114, + 473.62279299999864, + 483.159173, + 460.7298809999993, + 424.05461099999957, + 400.4854129999985, + 365.75835299999744, + 310.44000499999675 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 8432.297515000011, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 87, + "b4": 12, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 3725.551746, + "ttfb": 3706.679674, + "bytes": 799783, + "wallMs": 3763.521444, + "cpuMs": 4229.594 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 481.0785930000002, + "requestsPerSecond": 33.258598974908026, + "p50Ms": 29.294918999999936, + "p95Ms": 50.40305200000057, + "maxMs": 50.40305200000057, + "ttfbP95Ms": 11.360979000000043, + "cpuMs": 709.3, + "cpuMsPerRequest": 44.33125, + "peakRssMiB": 308.75390625, + "eventLoopP95Ms": 11.960319, + "wireBytes": 12796528, + "latenciesMs": [ + 30.674918000000616, + 30.5943299999999, + 29.073419999999714, + 30.4910289999998, + 31.51218599999993, + 32.507966000000124, + 35.56373600000006, + 29.294918999999936, + 28.7416089999997, + 30.21986199999992, + 23.84667199999967, + 21.898228999999446, + 20.372504999999364, + 26.2468429999999, + 50.40305200000057, + 24.62238200000047 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 372.747198, + "requestsPerSecond": 42.92453460642781, + "p50Ms": 23.006507999999485, + "p95Ms": 52.718026000000464, + "maxMs": 52.718026000000464, + "ttfbP95Ms": 21.90925100000004, + "cpuMs": 702.995, + "cpuMsPerRequest": 43.9371875, + "peakRssMiB": 308.2265625, + "eventLoopP95Ms": 16.662527, + "wireBytes": 12796528, + "latenciesMs": [ + 24.991613999999572, + 23.006507999999485, + 21.772165000000314, + 26.172998000000007, + 34.96902500000033, + 23.882144000000153, + 24.210925999999745, + 52.718026000000464, + 30.73658599999999, + 12.510244000000057, + 14.931843000000299, + 16.204781999999796, + 24.451979000000392, + 12.961599000000206, + 12.844790000000103, + 13.387219000000186 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 488.12755800000014, + "requestsPerSecond": 65.55663468605063, + "p50Ms": 115.88346000000001, + "p95Ms": 152.05853800000023, + "maxMs": 155.81982100000005, + "ttfbP95Ms": 65.66024500000003, + "cpuMs": 946.747, + "cpuMsPerRequest": 29.58584375, + "peakRssMiB": 309.546875, + "eventLoopP95Ms": 23.035903, + "wireBytes": 25593056, + "latenciesMs": [ + 116.65153499999997, + 117.55042200000025, + 125.14789500000006, + 133.6659840000002, + 142.1696550000006, + 146.48830499999985, + 152.05853800000023, + 155.81982100000005, + 115.88346000000001, + 115.58879199999956, + 112.6346279999998, + 109.94669599999997, + 109.73863900000015, + 105.6489960000008, + 107.69351000000006, + 104.19921900000008, + 85.2122560000007, + 85.2631139999994, + 88.22737699999925, + 85.89651099999992, + 86.90756599999986, + 88.06617199999982, + 88.79741600000034, + 88.8839909999997, + 136.86490100000083, + 136.94412999999986, + 142.02569099999982, + 141.02401499999996, + 140.39713500000016, + 140.23763600000075, + 136.29629999999997, + 136.15853999999945 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 640.1520069999997, + "requestsPerSecond": 49.98812727302754, + "p50Ms": 157.93894100000034, + "p95Ms": 183.16702700000042, + "maxMs": 219.3221390000008, + "ttfbP95Ms": 92.1219230000006, + "cpuMs": 1096.633, + "cpuMsPerRequest": 34.26978125, + "peakRssMiB": 309.44140625, + "eventLoopP95Ms": 31.768575, + "wireBytes": 25593056, + "latenciesMs": [ + 174.30246100000022, + 175.03502800000024, + 175.61992999999984, + 176.18260800000007, + 176.4664840000005, + 177.60703299999932, + 178.14705999999933, + 183.16702700000042, + 133.48813699999937, + 134.4185239999997, + 135.0480950000001, + 135.72664000000077, + 136.33877200000006, + 143.17488400000002, + 142.9415399999998, + 148.79262800000015, + 165.38116100000025, + 164.65023499999916, + 163.8455699999995, + 162.95775400000002, + 162.30862700000034, + 160.7922640000006, + 160.6099749999994, + 219.3221390000008, + 152.44505700000082, + 152.7206010000009, + 152.70577000000048, + 152.86105400000088, + 152.99440700000014, + 157.93894100000034, + 157.4929090000005, + 86.71923100000095 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 802816, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617666224 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617669359 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 355.85982499999955, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 168.27611799999977, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2442.383011, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2737.852761, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "identity", + "binary": false, + "cold": { + "ms": 627.68426, + "ttfb": 611.2608359999999, + "bytes": 264491, + "wallMs": 632.955802, + "cpuMs": 287.381 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 327.51738099999966, + "requestsPerSecond": 48.85236915105894, + "p50Ms": 19.438476999999693, + "p95Ms": 24.0334170000001, + "maxMs": 24.0334170000001, + "ttfbP95Ms": 10.903306000000157, + "cpuMs": 437.79, + "cpuMsPerRequest": 27.361875, + "peakRssMiB": 163.9375, + "eventLoopP95Ms": 11.894783, + "wireBytes": 4231856, + "latenciesMs": [ + 21.250236999999743, + 24.0334170000001, + 21.66240899999957, + 21.23275599999988, + 22.214344999999867, + 21.593786999999793, + 21.347391000000243, + 18.579045999999835, + 19.210315000000264, + 18.925530999999864, + 20.961803000000145, + 17.505277000000206, + 19.356649999999718, + 18.222642000000178, + 18.215569999999843, + 19.438476999999693 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 279.2944809999999, + "requestsPerSecond": 57.287204325387314, + "p50Ms": 18.158910000000105, + "p95Ms": 20.831223999999565, + "maxMs": 20.831223999999565, + "ttfbP95Ms": 9.269518999999946, + "cpuMs": 389.717, + "cpuMsPerRequest": 24.3573125, + "peakRssMiB": 179.921875, + "eventLoopP95Ms": 11.583487, + "wireBytes": 4231856, + "latenciesMs": [ + 18.158910000000105, + 19.28265799999963, + 19.303124000000025, + 20.831223999999565, + 18.34045600000036, + 18.341175999999905, + 18.845682000000124, + 19.59147299999995, + 17.87077999999974, + 18.11311999999998, + 17.973573000000215, + 19.212680999999975, + 13.07043799999974, + 11.850085000000036, + 13.143043999999918, + 12.697014999999737 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 402.7383749999999, + "requestsPerSecond": 79.45604885553806, + "p50Ms": 96.01321000000007, + "p95Ms": 133.03084500000023, + "maxMs": 136.22947599999998, + "ttfbP95Ms": 79.49574100000018, + "cpuMs": 746.568, + "cpuMsPerRequest": 23.33025, + "peakRssMiB": 208.0546875, + "eventLoopP95Ms": 16.809983, + "wireBytes": 8463712, + "latenciesMs": [ + 76.72733800000015, + 80.6829630000002, + 84.48551699999962, + 89.58632999999963, + 95.33245299999999, + 100.44694299999992, + 106.70758800000021, + 112.03896600000007, + 90.87739899999997, + 90.70254299999988, + 91.09967700000016, + 90.95445399999971, + 88.91312700000026, + 90.00463799999989, + 88.66342200000008, + 92.215013, + 96.3520480000002, + 100.09351500000002, + 98.14043099999981, + 100.76995699999998, + 105.68945799999983, + 111.21180099999992, + 136.22947599999998, + 133.03084500000023, + 122.89312199999995, + 120.51511400000027, + 118.14478800000006, + 113.18589800000018, + 106.32411499999989, + 96.01321000000007, + 67.46296299999995, + 62.657776999999896 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 355.7833819999996, + "requestsPerSecond": 89.94236835940818, + "p50Ms": 70.59644300000036, + "p95Ms": 149.89214699999957, + "maxMs": 150.06893899999977, + "ttfbP95Ms": 75.60004300000037, + "cpuMs": 477.464, + "cpuMsPerRequest": 14.92075, + "peakRssMiB": 212.953125, + "eventLoopP95Ms": 33.619967, + "wireBytes": 8463712, + "latenciesMs": [ + 65.09878599999956, + 64.40084099999967, + 64.74980700000015, + 65.19093299999986, + 65.6219860000001, + 66.02141099999972, + 66.46668200000022, + 71.07974699999977, + 66.08168300000034, + 66.0893329999999, + 65.65053700000044, + 66.71088799999961, + 68.60675300000003, + 68.69639900000038, + 75.65247399999953, + 70.59644300000036, + 103.51111799999944, + 103.86879800000042, + 118.31545399999959, + 119.32445800000005, + 115.21021000000019, + 116.30152799999996, + 149.89214699999957, + 150.06893899999977, + 114.80971300000056, + 114.13348899999983, + 99.80344799999966, + 99.6123889999999, + 101.44897399999991, + 101.34123199999976, + 62.01023600000008, + 61.532814000000144 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617674315 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "activeReaders": 0, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617674612 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 52.87731299999996, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 101, + "bytes": 26711244, + "ms": 4687.404856999996, + "b0": 0, + "b1": 0, + "b2": 4, + "b3": 93, + "b4": 4, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 6.446542000000136, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 80.21619400000009, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 264491, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "identity", + "binary": false, + "cold": { + "ms": 3848.916447, + "ttfb": 3741.606994, + "bytes": 2115777, + "wallMs": 3860.608068, + "cpuMs": 4568.378 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 1063.998678, + "requestsPerSecond": 15.037612668913486, + "p50Ms": 61.52423900000031, + "p95Ms": 97.8602979999996, + "maxMs": 97.8602979999996, + "ttfbP95Ms": 9.313005999999405, + "cpuMs": 2394.845, + "cpuMsPerRequest": 149.6778125, + "peakRssMiB": 311.1015625, + "eventLoopP95Ms": 12.165119, + "wireBytes": 33852432, + "latenciesMs": [ + 90.0779679999996, + 91.81199199999992, + 97.8602979999996, + 60.126703999999336, + 62.12088600000061, + 74.91867399999956, + 57.39231100000052, + 56.338934999999765, + 72.79759600000034, + 54.69026500000018, + 61.52423900000031, + 44.300318999999945, + 65.54904100000022, + 43.01096199999938, + 83.67679700000008, + 44.132002000000284 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 918.4552229999999, + "requestsPerSecond": 17.420555296902048, + "p50Ms": 54.39099400000032, + "p95Ms": 77.16719399999965, + "maxMs": 77.16719399999965, + "ttfbP95Ms": 7.693025000000489, + "cpuMs": 2411.157, + "cpuMsPerRequest": 150.6973125, + "peakRssMiB": 310.52734375, + "eventLoopP95Ms": 14.147583, + "wireBytes": 33852432, + "latenciesMs": [ + 45.8752429999995, + 60.04084899999998, + 66.93521200000032, + 55.9131239999997, + 54.39099400000032, + 64.11491299999943, + 45.857028000000355, + 77.16719399999965, + 50.32623500000045, + 64.33818699999938, + 48.94156999999905, + 58.553719000001365, + 50.703676999999516, + 53.47287700000015, + 45.83121799999935, + 73.11969399999907 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1207.1573310000003, + "requestsPerSecond": 26.508557897330114, + "p50Ms": 295.5899750000008, + "p95Ms": 340.6526250000006, + "maxMs": 340.98322299999927, + "ttfbP95Ms": 45.05598800000007, + "cpuMs": 3141.374, + "cpuMsPerRequest": 98.1679375, + "peakRssMiB": 316.98828125, + "eventLoopP95Ms": 12.427263, + "wireBytes": 67704864, + "latenciesMs": [ + 318.48715599999923, + 321.78660800000034, + 322.8653060000015, + 326.95976300000075, + 329.14500299999963, + 333.6105150000003, + 340.6526250000006, + 340.98322299999927, + 277.8236020000004, + 281.3795109999992, + 279.5990519999996, + 278.53985399999874, + 274.8837930000009, + 282.5012400000014, + 282.5368279999984, + 282.52159700000084, + 299.4073750000007, + 296.3244589999995, + 295.80887299999995, + 295.3220220000003, + 295.5899750000008, + 307.49528699999973, + 306.74820999999974, + 308.09574799999973, + 299.07923200000005, + 298.9020729999993, + 293.0019889999985, + 294.8242709999995, + 294.5241210000004, + 291.1148599999997, + 272.39386399999967, + 271.85839900000065 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1927.0909479999991, + "requestsPerSecond": 16.605339791155522, + "p50Ms": 479.93985799999973, + "p95Ms": 607.6712669999997, + "maxMs": 612.9210320000002, + "ttfbP95Ms": 114.09128400000009, + "cpuMs": 3809.805, + "cpuMsPerRequest": 119.05640625, + "peakRssMiB": 316.98828125, + "eventLoopP95Ms": 15.458303, + "wireBytes": 67704864, + "latenciesMs": [ + 363.0696029999999, + 363.41447700000026, + 364.1531180000002, + 364.6640669999997, + 367.6775859999998, + 368.3430470000003, + 374.04738499999985, + 380.9051419999996, + 460.4311739999994, + 461.5010320000001, + 462.1420850000013, + 465.4013070000001, + 482.70833199999834, + 478.01268600000003, + 479.93985799999973, + 493.55015999999887, + 551.4033019999988, + 548.9624060000006, + 551.4711229999994, + 554.8437400000003, + 561.5209070000001, + 562.0318060000009, + 607.6712669999997, + 612.9210320000002, + 537.5511800000004, + 539.4701909999985, + 535.1555320000007, + 537.5567150000006, + 507.0802130000011, + 454.51055799999995, + 510.98192299999937, + 451.58297400000083 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617679426 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617682703 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 347.2098780000001, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 100, + "bytes": 211559075, + "ms": 24745.537006, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 34, + "b4": 66, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2652.5576639999995, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2906.0289430000003, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 2115777, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": true, + "cold": { + "ms": 138.61129900000014, + "ttfb": 104.3181910000003, + "bytes": 262244, + "wallMs": 144.0130119999999, + "cpuMs": 314.616 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 503.88323100000025, + "requestsPerSecond": 31.753388514729103, + "p50Ms": 31.02013799999986, + "p95Ms": 35.49330299999974, + "maxMs": 35.49330299999974, + "ttfbP95Ms": 6.320975999999973, + "cpuMs": 738.734, + "cpuMsPerRequest": 46.170875, + "peakRssMiB": 163.41796875, + "eventLoopP95Ms": 10.854399, + "wireBytes": 4195904, + "latenciesMs": [ + 31.795036999999866, + 31.02013799999986, + 30.21937700000035, + 30.96253200000001, + 28.688588999999865, + 29.415817999999945, + 31.2265010000001, + 32.01595600000019, + 35.49330299999974, + 31.985879000000295, + 34.537487000000056, + 28.08584299999984, + 28.4965729999999, + 30.363226999999824, + 32.44986199999994, + 32.5868089999999 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 538.0641860000001, + "requestsPerSecond": 29.73622927581357, + "p50Ms": 33.32101999999986, + "p95Ms": 45.80806900000016, + "maxMs": 45.80806900000016, + "ttfbP95Ms": 6.118635999999697, + "cpuMs": 741.459, + "cpuMsPerRequest": 46.3411875, + "peakRssMiB": 180.43359375, + "eventLoopP95Ms": 10.706943, + "wireBytes": 4195904, + "latenciesMs": [ + 41.75004199999967, + 34.298413999999866, + 32.36340500000006, + 33.55418899999995, + 34.298159999999825, + 34.89213999999993, + 45.80806900000016, + 38.19690899999978, + 33.32101999999986, + 31.09152099999983, + 33.46132299999999, + 28.17147799999975, + 31.75526899999977, + 28.493375000000015, + 27.081048999999894, + 26.061625000000276 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 551.7417589999995, + "requestsPerSecond": 57.99814764428593, + "p50Ms": 126.40882599999986, + "p95Ms": 157.44787199999973, + "maxMs": 158.33596500000021, + "ttfbP95Ms": 38.94576500000039, + "cpuMs": 1621.925, + "cpuMsPerRequest": 50.68515625, + "peakRssMiB": 207.1015625, + "eventLoopP95Ms": 18.382847, + "wireBytes": 8391808, + "latenciesMs": [ + 97.16393599999992, + 106.7613809999998, + 114.29479999999967, + 115.60274200000003, + 125.96154299999989, + 136.09691500000008, + 136.53614200000038, + 136.7801089999998, + 119.77849600000036, + 121.05726700000014, + 122.66371100000015, + 132.5152409999996, + 121.46562199999971, + 123.06394000000046, + 131.7811870000005, + 134.04103700000041, + 144.8394849999995, + 158.33596500000021, + 155.42302000000018, + 154.65421200000037, + 157.44787199999973, + 147.850684, + 152.3774169999997, + 151.91908500000045, + 116.105595, + 122.1559699999998, + 122.28437600000052, + 120.84967700000016, + 138.4188549999999, + 135.02641200000016, + 126.40882599999986, + 125.93219899999986 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 314.5124399999995, + "requestsPerSecond": 101.74478313163081, + "p50Ms": 68.73678500000005, + "p95Ms": 110.55765300000076, + "maxMs": 111.32592699999987, + "ttfbP95Ms": 26.18255599999975, + "cpuMs": 1073.106, + "cpuMsPerRequest": 33.5345625, + "peakRssMiB": 206.3203125, + "eventLoopP95Ms": 14.983167, + "wireBytes": 8391808, + "latenciesMs": [ + 69.3889280000003, + 67.74636700000065, + 69.77035599999999, + 70.70550400000047, + 70.49955399999999, + 73.59759100000065, + 76.19245499999943, + 80.10081499999978, + 57.52258900000015, + 62.785023999999794, + 61.73900400000002, + 61.56136599999991, + 65.5605400000004, + 67.93274800000017, + 65.38465900000028, + 63.761091999999735, + 63.928593999999975, + 68.73678500000005, + 66.13730399999986, + 68.67552599999999, + 58.54818400000022, + 69.69448999999986, + 63.636123000000225, + 65.21541400000024, + 100.15057800000068, + 110.55765300000076, + 104.43158099999982, + 111.32592699999987, + 108.63438700000006, + 108.32985800000006, + 105.0323870000002, + 105.83105700000033 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_binary", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 0, + "b0": 100, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 262244, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": true, + "cold": { + "ms": 521.9317799999999, + "ttfb": 512.6996059999997, + "bytes": 262144, + "wallMs": 526.5244380000004, + "cpuMs": 186.254 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 222.85512100000005, + "requestsPerSecond": 71.79552315515332, + "p50Ms": 12.454180000000179, + "p95Ms": 18.423817000000327, + "maxMs": 18.423817000000327, + "ttfbP95Ms": 11.57428200000004, + "cpuMs": 267.452, + "cpuMsPerRequest": 16.71575, + "peakRssMiB": 159.4765625, + "eventLoopP95Ms": 11.993087, + "wireBytes": 4194304, + "latenciesMs": [ + 16.159103999999843, + 17.168876000000182, + 18.08847300000025, + 16.262800999999854, + 18.423817000000327, + 12.699432000000343, + 12.403623000000152, + 12.6732420000003, + 11.200103000000126, + 11.58707400000003, + 13.09722499999998, + 11.563346999999794, + 12.454180000000179, + 11.393558000000212, + 11.697527999999693, + 12.047374000000218 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 177.4328989999999, + "requestsPerSecond": 90.1749342437335, + "p50Ms": 11.558438999999908, + "p95Ms": 12.38039899999967, + "maxMs": 12.38039899999967, + "ttfbP95Ms": 7.576060999999754, + "cpuMs": 203.419, + "cpuMsPerRequest": 12.7136875, + "peakRssMiB": 172.8828125, + "eventLoopP95Ms": 10.633215, + "wireBytes": 4194304, + "latenciesMs": [ + 12.15402800000038, + 11.445444999999836, + 11.577256999999918, + 11.577090999999655, + 11.79764699999987, + 12.38039899999967, + 11.15512600000011, + 12.13189999999986, + 11.949161000000004, + 11.832041000000117, + 11.558438999999908, + 11.296366000000035, + 8.282322000000022, + 8.51778000000013, + 9.053200999999717, + 8.24156099999982 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 377.2621309999995, + "requestsPerSecond": 84.82165945248303, + "p50Ms": 101.22757000000001, + "p95Ms": 127.143912, + "maxMs": 132.03915800000004, + "ttfbP95Ms": 104.40286800000013, + "cpuMs": 398.732, + "cpuMsPerRequest": 12.460375, + "peakRssMiB": 200.7265625, + "eventLoopP95Ms": 18.857983, + "wireBytes": 8388608, + "latenciesMs": [ + 35.32474199999979, + 47.93038299999989, + 54.47450299999991, + 61.27118100000007, + 68.05568799999992, + 74.91307999999981, + 81.29662199999984, + 127.143912, + 103.26784199999975, + 110.36018100000001, + 113.7339780000002, + 117.76906699999972, + 124.44378800000004, + 126.26677699999982, + 132.03915800000004, + 101.22757000000001, + 104.64710500000047, + 108.09284199999911, + 108.78035999999975, + 108.43811000000005, + 106.92595999999958, + 109.34190900000067, + 107.97015099999953, + 105.75159299999996, + 100.25055599999996, + 87.48415099999966, + 80.97261000000071, + 74.81758400000035, + 68.03585399999974, + 59.06964400000015, + 51.072815999999875, + 39.917459999999664 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 291.2953440000001, + "requestsPerSecond": 109.85414171261175, + "p50Ms": 64.49643199999991, + "p95Ms": 98.69169500000044, + "maxMs": 101.00897800000075, + "ttfbP95Ms": 87.475864, + "cpuMs": 478.027, + "cpuMsPerRequest": 14.93834375, + "peakRssMiB": 215.984375, + "eventLoopP95Ms": 41.091071, + "wireBytes": 8388608, + "latenciesMs": [ + 40.674691000000166, + 41.75534299999981, + 43.29822400000012, + 44.463738000000376, + 45.755121000000145, + 47.03761399999985, + 50.22445700000026, + 51.546495999999934, + 64.49643199999991, + 85.84921699999995, + 88.78291199999967, + 87.17860400000063, + 86.87599299999965, + 88.62265699999989, + 86.54573900000014, + 92.14010600000074, + 68.46571899999981, + 45.450182999999925, + 45.16786800000045, + 43.96649400000024, + 46.14547700000003, + 45.90370400000029, + 52.169356000000334, + 51.48962399999982, + 94.63983800000005, + 97.8864050000002, + 97.30218400000012, + 97.91100499999993, + 98.63473700000031, + 101.00897800000075, + 98.69169500000044, + 94.6185030000006 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 262144, + "allocatedBytes": 262144, + "activeReaders": 2, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617696692 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "activeReaders": 0, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": null + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 33.74377900000036, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_binary", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 262144, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + } + ], + "completedAt": "2026-11-02T11:08:18.248Z", + "assertions": "All 2200 response bodies verified against expected output or the validated wire digest" +} diff --git a/docs/cache-performance-optimized-summary.json b/docs/cache-performance-optimized-summary.json new file mode 100644 index 0000000..7763b54 --- /dev/null +++ b/docs/cache-performance-optimized-summary.json @@ -0,0 +1,51 @@ +{ + "scope": "Compiled local loopback changed-text gzip responses; repeated optimized measurements ran after all other task benchmarks/tests ended. The full optimized run overlapped the metadata benchmark during its early scenarios. Shared host, synthetic workload; no production capacity claim.", + "verifiedOptimizedResponses": 2500, + "rows": [ + { + "bytes": 16384, + "before": { + "serialP50Ms": 44.88915300000008, + "concurrency8P95Ms": 462.1094459999995 + }, + "optimized": { + "serialP50Ms": 8.908395999999811, + "concurrency8P95Ms": 111.85025099999984 + }, + "repeat": { + "serialP50Ms": 7.257277000000158, + "concurrency8P95Ms": 114.94514900000013 + } + }, + { + "bytes": 262144, + "before": { + "serialP50Ms": 45.89932399999998, + "concurrency8P95Ms": 444.0948499999995 + }, + "optimized": { + "serialP50Ms": 9.481284999999843, + "concurrency8P95Ms": 136.36852099999942 + }, + "repeat": { + "serialP50Ms": 9.021533999999974, + "concurrency8P95Ms": 107.61299899999995 + } + }, + { + "bytes": 2097152, + "before": { + "serialP50Ms": 60.49789199999941, + "concurrency8P95Ms": 528.2149260000006 + }, + "optimized": { + "serialP50Ms": 24.991613999999572, + "concurrency8P95Ms": 177.60703299999932 + }, + "repeat": { + "serialP50Ms": 19.012864000000263, + "concurrency8P95Ms": 216.19974999999977 + } + } + ] +} diff --git a/docs/cache-performance-report.html b/docs/cache-performance-report.html new file mode 100644 index 0000000..948dd7b --- /dev/null +++ b/docs/cache-performance-report.html @@ -0,0 +1,11 @@ +
The current cache slows small and medium warm reads. Large files benefit. A benchmark-only SQLite change identifies a substantial part of the overhead.
+| File / baseline | Baseline | Current shared cache | Experimental SQLite NORMAL |
|---|
16 and 256 KiB: raw source cache with repeated transformation and gzip. 2 MiB: existing transformed-file cache. Two warm batches per setting: 32 serial requests or 64 requests at concurrency eight. CPU and memory include both server and benchmark client.
+NORMAL was tested only on temporary cache indexes. In WAL mode it can lose recent commits after power loss, so recovery needs validation before adoption. SQLite durability documentation.
+Local compiled-code evaluation · Node 24.14.1 · 2 November 2026. Shared host, synthetic content, warm filesystem cache, no TLS or production traffic. These measurements are not production capacity guarantees. Application settings remain unchanged.
+ \ No newline at end of file diff --git a/docs/cache-performance-results.json b/docs/cache-performance-results.json new file mode 100644 index 0000000..964e9e1 --- /dev/null +++ b/docs/cache-performance-results.json @@ -0,0 +1,6858 @@ +{ + "measuredAt": "2026-11-02T10:44:38.180Z", + "environment": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 2.19, + 3.52, + 3.52 + ] + }, + "methodology": { + "scope": "Local loopback HTTP, deterministic synthetic content, isolated process per scenario; no production traffic", + "upstreamDelayMs": 20, + "rawSourceBaseline": "Raw local file; anonymization and gzip repeated every request; no transformed-result cache. Not a complete legacy deployment comparison.", + "measurements": "Cold request then 3 warmups, 2 batches each at concurrency 1 (16 requests) and 8 (32 requests). CPU and RSS include server, loopback client, hashing and Node runtime; worker-thread CPU included. First cold request also includes worker startup when applicable.", + "limitations": "Warm OS page cache; no TLS, proxy, GitHub bandwidth, database auth or real-world RTT. Small sample p95 is descriptive, not a capacity SLA. Fresh metadata indexes; not a full-size index test." + }, + "scenarios": [ + { + "size": 16384, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 85.95405000000028, + "ttfb": 85.06523900000002, + "bytes": 6297, + "wallMs": 88.24232699999993, + "cpuMs": 252.89 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 454.5652249999998, + "requestsPerSecond": 35.198469042589004, + "p50Ms": 27.736519999999928, + "p95Ms": 32.43306500000017, + "maxMs": 32.43306500000017, + "ttfbP95Ms": 32.081075000000055, + "cpuMs": 194.177, + "cpuMsPerRequest": 12.1360625, + "peakRssMiB": 141.6015625, + "eventLoopP95Ms": 12.615679, + "wireBytes": 100752, + "latenciesMs": [ + 30.92009599999983, + 32.047685999999885, + 28.617784999999913, + 26.418804999999793, + 27.395849, + 27.815382000000227, + 25.545646999999917, + 26.760655999999926, + 27.736519999999928, + 25.072635999999875, + 29.006418999999823, + 26.94087300000001, + 25.60169599999972, + 29.079361000000063, + 32.43306500000017, + 29.61191800000006 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 454.18376000000035, + "requestsPerSecond": 35.22803193139268, + "p50Ms": 27.950624999999945, + "p95Ms": 29.953220999999758, + "maxMs": 29.953220999999758, + "ttfbP95Ms": 29.393362000000252, + "cpuMs": 167.768, + "cpuMsPerRequest": 10.4855, + "peakRssMiB": 145.38671875, + "eventLoopP95Ms": 12.951551, + "wireBytes": 100752, + "latenciesMs": [ + 27.296382999999878, + 25.913872000000083, + 27.07371400000011, + 29.698695999999927, + 27.082464999999956, + 26.86242399999992, + 27.911595000000034, + 27.597170000000006, + 28.003467999999884, + 29.857402000000093, + 27.950624999999945, + 28.39123100000006, + 29.42581199999995, + 28.718343000000004, + 29.953220999999758, + 29.811597000000347 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 319.072181, + "requestsPerSecond": 100.29078655403055, + "p50Ms": 77.3084289999997, + "p95Ms": 83.16527399999995, + "maxMs": 85.92784500000016, + "ttfbP95Ms": 82.85903499999995, + "cpuMs": 356.666, + "cpuMsPerRequest": 11.1458125, + "peakRssMiB": 155.79296875, + "eventLoopP95Ms": 39.944191, + "wireBytes": 201504, + "latenciesMs": [ + 73.6519559999997, + 74.53326800000013, + 80.93017899999995, + 81.58604800000012, + 82.09360000000015, + 82.61552200000006, + 83.16527399999995, + 85.92784500000016, + 81.09806899999967, + 81.20724599999994, + 75.44102899999962, + 75.76665400000002, + 75.7319749999997, + 75.55569299999979, + 77.98998900000015, + 79.42995000000019, + 73.02227399999992, + 79.29785500000025, + 79.43708699999979, + 79.44747800000005, + 79.19141300000001, + 79.37738399999989, + 76.95459100000016, + 75.2228369999998, + 77.3084289999997, + 77.31671899999992, + 76.66069700000025, + 75.98237800000015, + 75.53600300000016, + 74.98335099999986, + 74.55354899999975, + 73.06984799999964 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 294.92546600000014, + "requestsPerSecond": 108.50199012654942, + "p50Ms": 70.92170800000031, + "p95Ms": 82.20073000000002, + "maxMs": 83.00773200000003, + "ttfbP95Ms": 81.89524800000027, + "cpuMs": 300.47, + "cpuMsPerRequest": 9.3896875, + "peakRssMiB": 163.26171875, + "eventLoopP95Ms": 36.601855, + "wireBytes": 201504, + "latenciesMs": [ + 69.78970899999968, + 77.49611400000003, + 78.37722199999962, + 79.3150770000002, + 80.6086879999998, + 81.19560599999977, + 82.20073000000002, + 83.00773200000003, + 78.32813300000043, + 71.12308500000017, + 70.96713599999975, + 74.04995800000006, + 73.57149400000026, + 73.46664400000009, + 73.11799199999996, + 74.75970899999993, + 62.28293699999995, + 62.80678100000023, + 70.27487400000018, + 67.69631500000014, + 68.9379799999997, + 69.23950599999989, + 69.66021600000022, + 70.92170800000031, + 49.2500170000003, + 73.62912499999993, + 69.64628099999982, + 68.66142200000013, + 67.10404900000003, + 66.34799099999964, + 65.65464199999997, + 63.38949700000012 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 260.13173100000313, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 137.6469119999997, + "ttfb": 135.33600499999966, + "bytes": 6297, + "wallMs": 143.07577600000013, + "cpuMs": 344.005 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 171.95928099999992, + "requestsPerSecond": 93.0452832028299, + "p50Ms": 9.436431999999968, + "p95Ms": 14.821071999999731, + "maxMs": 14.821071999999731, + "ttfbP95Ms": 13.800523999999768, + "cpuMs": 234.269, + "cpuMsPerRequest": 14.6418125, + "peakRssMiB": 144.06640625, + "eventLoopP95Ms": 12.525567, + "wireBytes": 100752, + "latenciesMs": [ + 14.821071999999731, + 12.067360000000008, + 12.037286000000222, + 11.523952000000008, + 11.729616000000078, + 13.079126999999971, + 9.183178000000225, + 10.87661799999978, + 9.220208999999613, + 8.017010999999911, + 9.124657999999727, + 8.734979999999723, + 9.148009000000002, + 9.089067000000341, + 9.436431999999968, + 9.479964000000109 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 141.55855900000006, + "requestsPerSecond": 113.02742916449152, + "p50Ms": 8.503367000000253, + "p95Ms": 10.794832000000042, + "maxMs": 10.794832000000042, + "ttfbP95Ms": 10.377090999999837, + "cpuMs": 172.324, + "cpuMsPerRequest": 10.77025, + "peakRssMiB": 148.1875, + "eventLoopP95Ms": 12.689407, + "wireBytes": 100752, + "latenciesMs": [ + 9.58577699999978, + 9.70812500000011, + 8.503367000000253, + 10.011745000000246, + 8.011360999999852, + 7.860498000000007, + 7.769714999999906, + 7.69260499999973, + 8.735810000000129, + 8.06757800000014, + 8.695259000000078, + 7.886892999999873, + 8.504639999999654, + 8.764544000000114, + 8.150252999999793, + 10.794832000000042 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 281.39008699999977, + "requestsPerSecond": 113.72113474629981, + "p50Ms": 60.20711500000016, + "p95Ms": 102.4742110000002, + "maxMs": 111.8597249999998, + "ttfbP95Ms": 102.23767499999985, + "cpuMs": 360.047, + "cpuMsPerRequest": 11.25146875, + "peakRssMiB": 158.609375, + "eventLoopP95Ms": 19.759103, + "wireBytes": 201504, + "latenciesMs": [ + 34.8106029999999, + 44.79265399999986, + 56.01683099999991, + 68.39543600000025, + 80.6937939999998, + 92.13992400000006, + 69.40725399999974, + 102.4742110000002, + 68.7717990000001, + 111.8597249999998, + 68.45068100000026, + 64.29324499999984, + 61.961133000000245, + 61.77556400000003, + 60.20711500000016, + 60.25669700000026, + 59.316675999999916, + 59.498921999999766, + 57.42613799999981, + 58.636369000000286, + 58.277857999999924, + 57.99763600000006, + 58.47507900000028, + 58.642965000000004, + 58.63328799999999, + 58.32724099999996, + 77.55363799999986, + 74.71733399999994, + 72.47350600000027, + 63.29790700000012, + 57.03891900000008, + 56.53193299999975 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 258.7012530000002, + "requestsPerSecond": 123.69480096797203, + "p50Ms": 61.73791800000026, + "p95Ms": 75.4637359999997, + "maxMs": 76.30305999999973, + "ttfbP95Ms": 75.08831399999963, + "cpuMs": 333.424, + "cpuMsPerRequest": 10.4195, + "peakRssMiB": 168.3671875, + "eventLoopP95Ms": 34.504703, + "wireBytes": 201504, + "latenciesMs": [ + 66.92645600000014, + 67.96470199999976, + 68.90562399999999, + 69.97225500000013, + 70.81222900000012, + 71.77422200000001, + 75.40710200000012, + 76.30305999999973, + 75.43583699999999, + 75.43481900000006, + 75.4637359999997, + 75.30158500000016, + 75.1009610000001, + 75.17250300000023, + 74.61533499999996, + 74.829612, + 58.182956000000104, + 57.81264300000021, + 57.508266999999705, + 57.19954900000039, + 56.9012359999997, + 56.541357999999946, + 55.190406999999595, + 61.73791800000026, + 51.10323500000004, + 50.67834700000003, + 50.29013900000018, + 49.91463799999974, + 49.84766099999979, + 49.59532299999955, + 49.341605999999956, + 43.02457800000002 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 305.7102469999995, + "b0": 0, + "b1": 0, + "b2": 99, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 687.163904, + "ttfb": 685.811588, + "bytes": 6297, + "wallMs": 691.8826679999997, + "cpuMs": 430.915 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 711.0317090000003, + "requestsPerSecond": 22.50251261297827, + "p50Ms": 41.78524800000014, + "p95Ms": 58.979915999999776, + "maxMs": 58.979915999999776, + "ttfbP95Ms": 58.443874999999935, + "cpuMs": 214.875, + "cpuMsPerRequest": 13.4296875, + "peakRssMiB": 145.8984375, + "eventLoopP95Ms": 24.707071, + "wireBytes": 100752, + "latenciesMs": [ + 51.71796799999993, + 41.39104300000008, + 44.699826999999914, + 47.92313100000001, + 44.742339999999786, + 45.0345199999997, + 58.979915999999776, + 47.2625979999998, + 41.78524800000014, + 39.27986499999997, + 40.40188000000035, + 41.09266600000001, + 37.48215600000003, + 38.11749400000008, + 41.11155899999994, + 44.654540999999426 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 703.2503730000008, + "requestsPerSecond": 22.751498775244848, + "p50Ms": 40.03317800000059, + "p95Ms": 65.50595199999952, + "maxMs": 65.50595199999952, + "ttfbP95Ms": 65.1589699999995, + "cpuMs": 173.698, + "cpuMsPerRequest": 10.856125, + "peakRssMiB": 147.4453125, + "eventLoopP95Ms": 24.035327, + "wireBytes": 100752, + "latenciesMs": [ + 38.4124610000008, + 42.17134299999998, + 65.50595199999952, + 45.36672400000043, + 42.49537899999996, + 39.971066000000064, + 39.469882000000325, + 37.813819999999396, + 40.03317800000059, + 63.355774999999994, + 42.10807600000044, + 37.64974899999925, + 45.98718099999951, + 47.723745000000235, + 37.99053499999991, + 33.72012099999938 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1427.9498820000008, + "requestsPerSecond": 22.40975009233551, + "p50Ms": 363.04722200000015, + "p95Ms": 418.1422599999996, + "maxMs": 460.6377650000004, + "ttfbP95Ms": 417.8681399999996, + "cpuMs": 380.88, + "cpuMsPerRequest": 11.9025, + "peakRssMiB": 150.7890625, + "eventLoopP95Ms": 65.699839, + "wireBytes": 201504, + "latenciesMs": [ + 150.41176199999973, + 191.16824700000052, + 238.06588100000045, + 294.6294889999999, + 334.0516669999997, + 376.85608799999954, + 418.1422599999996, + 312.86792199999945, + 460.6377650000004, + 325.5563060000004, + 336.2512049999996, + 363.04722200000015, + 364.9016499999998, + 382.92719900000066, + 390.34868300000016, + 391.9590470000003, + 391.8731250000001, + 395.72882000000027, + 396.60979599999973, + 372.1735260000005, + 375.88131599999997, + 358.3923399999994, + 363.5859810000002, + 367.0568480000002, + 367.86812199999986, + 365.9775460000001, + 346.69182100000035, + 319.57630400000016, + 305.4107950000007, + 289.8648379999995, + 243.9317229999997, + 204.46839699999964 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1407.6951, + "requestsPerSecond": 22.73219534542672, + "p50Ms": 358.46000899999945, + "p95Ms": 432.73124200000075, + "maxMs": 448.3000140000004, + "ttfbP95Ms": 432.1105630000002, + "cpuMs": 340.805, + "cpuMsPerRequest": 10.65015625, + "peakRssMiB": 153.3671875, + "eventLoopP95Ms": 140.509183, + "wireBytes": 201504, + "latenciesMs": [ + 263.9888719999999, + 264.7602159999997, + 266.104953, + 267.23999599999934, + 268.1736660000006, + 269.3393299999998, + 270.65173200000027, + 271.7722679999997, + 370.63760600000023, + 370.4874469999995, + 370.2253269999992, + 370.900173, + 370.7584649999999, + 370.4042589999999, + 370.1921769999999, + 448.3000140000004, + 359.1385109999992, + 359.5424330000005, + 358.46000899999945, + 358.82371800000055, + 359.1915310000004, + 359.0549949999995, + 432.73124200000075, + 418.28066600000056, + 351.7080249999999, + 350.4553819999992, + 349.8094710000005, + 348.7601189999996, + 347.83322099999987, + 390.72681399999965, + 324.44725599999947, + 266.65156899999965 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "oldestAccess": 1793616289206, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 0 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "oldestAccess": null, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 10.633102000000235, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 4.631634999999733, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 4.927446000000145, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 87.49649399999998, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 69.95626500000003, + "ttfb": 68.86845000000017, + "bytes": 6286, + "wallMs": 72.47778000000017, + "cpuMs": 67.644 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 444.1568259999999, + "requestsPerSecond": 36.02331218027932, + "p50Ms": 26.93095600000015, + "p95Ms": 32.61251099999981, + "maxMs": 32.61251099999981, + "ttfbP95Ms": 32.073931999999786, + "cpuMs": 173.208, + "cpuMsPerRequest": 10.8255, + "peakRssMiB": 139.91796875, + "eventLoopP95Ms": 12.107775, + "wireBytes": 100576, + "latenciesMs": [ + 32.61251099999981, + 29.85756500000025, + 28.652783999999883, + 27.162876000000324, + 27.346967999999833, + 28.574843999999757, + 28.213850999999977, + 26.178378000000066, + 26.93095600000015, + 26.31964199999993, + 26.17878900000005, + 24.74231000000009, + 25.181542000000263, + 29.587393000000247, + 26.500310999999783, + 26.558202000000165 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 482.5752510000002, + "requestsPerSecond": 33.15545081693382, + "p50Ms": 29.834824000000026, + "p95Ms": 34.363384000000224, + "maxMs": 34.363384000000224, + "ttfbP95Ms": 31.456461000000218, + "cpuMs": 195.837, + "cpuMsPerRequest": 12.2398125, + "peakRssMiB": 142.92578125, + "eventLoopP95Ms": 14.770175, + "wireBytes": 100576, + "latenciesMs": [ + 31.186739000000216, + 29.897621000000072, + 28.81661699999995, + 31.88146599999982, + 31.816113999999743, + 30.750939000000017, + 29.834824000000026, + 30.42873299999974, + 28.861427999999705, + 28.05677700000024, + 28.25560200000018, + 27.73582600000009, + 30.07720399999971, + 29.06123000000025, + 28.403697000000193, + 34.363384000000224 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 376.9889119999998, + "requestsPerSecond": 84.88313311453578, + "p50Ms": 84.0718869999996, + "p95Ms": 126.55760700000019, + "maxMs": 129.17823599999974, + "ttfbP95Ms": 126.2176300000001, + "cpuMs": 374.032, + "cpuMsPerRequest": 11.6885, + "peakRssMiB": 153.44140625, + "eventLoopP95Ms": 39.387135, + "wireBytes": 201152, + "latenciesMs": [ + 100.68049500000006, + 119.06214899999986, + 120.17504599999984, + 120.6452489999997, + 125.018822, + 125.87027799999987, + 126.55760700000019, + 129.17823599999974, + 48.51149799999985, + 78.01101999999992, + 78.23140000000012, + 78.72745399999985, + 75.12243099999978, + 74.85088200000018, + 75.16985599999998, + 73.30492499999991, + 62.58139600000004, + 81.3445529999999, + 81.2121360000001, + 81.33672000000024, + 81.68028400000003, + 82.06302499999993, + 82.138508, + 84.47973999999977, + 84.0718869999996, + 89.22492800000009, + 88.51804700000002, + 87.72818099999995, + 89.61887000000024, + 88.71696299999985, + 87.85916799999995, + 85.65149100000008 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 313.7728100000004, + "requestsPerSecond": 101.98461746892588, + "p50Ms": 77.80097699999988, + "p95Ms": 82.3382330000004, + "maxMs": 84.553136, + "ttfbP95Ms": 82.03146100000004, + "cpuMs": 324.532, + "cpuMsPerRequest": 10.141625, + "peakRssMiB": 168.0703125, + "eventLoopP95Ms": 41.713663, + "wireBytes": 201152, + "latenciesMs": [ + 70.47264500000028, + 77.18804599999976, + 78.16889700000002, + 79.03337200000033, + 79.91029299999991, + 80.64816299999984, + 81.5416379999997, + 82.3382330000004, + 84.553136, + 78.47460300000012, + 78.52461200000016, + 78.97290599999997, + 79.00664300000017, + 78.85341799999969, + 78.85955999999987, + 79.99599499999977, + 70.84509700000035, + 77.70199899999989, + 77.80097699999988, + 77.53448500000013, + 77.49605399999973, + 77.53412200000002, + 77.49026099999992, + 78.45472599999994, + 81.20405500000015, + 73.77451599999995, + 73.03116200000022, + 72.73541900000009, + 72.41145700000015, + 71.91386000000011, + 71.45928800000002, + 70.24886099999958 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 314.6539689999963, + "b0": 0, + "b1": 0, + "b2": 99, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 145.9149209999996, + "ttfb": 143.15194999999994, + "bytes": 6286, + "wallMs": 150.96164399999998, + "cpuMs": 202.624 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 128.99410899999975, + "requestsPerSecond": 124.03667209329716, + "p50Ms": 7.095190999999886, + "p95Ms": 11.055770999999822, + "maxMs": 11.055770999999822, + "ttfbP95Ms": 10.567356000000018, + "cpuMs": 179.35, + "cpuMsPerRequest": 11.209375, + "peakRssMiB": 142.0703125, + "eventLoopP95Ms": 11.714559, + "wireBytes": 100576, + "latenciesMs": [ + 11.055770999999822, + 8.420896999999968, + 8.37870699999985, + 9.395782000000054, + 8.883790000000317, + 9.889574000000266, + 7.095190999999886, + 8.162634000000253, + 6.5357679999997345, + 6.730883000000176, + 6.814487999999983, + 6.861793999999918, + 7.0032860000001165, + 7.418884000000162, + 6.527482999999847, + 6.355446000000029 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 143.47517900000003, + "requestsPerSecond": 111.51754687826525, + "p50Ms": 8.364767000000029, + "p95Ms": 10.736985999999888, + "maxMs": 10.736985999999888, + "ttfbP95Ms": 10.325357000000167, + "cpuMs": 174.807, + "cpuMsPerRequest": 10.9254375, + "peakRssMiB": 146.50390625, + "eventLoopP95Ms": 12.869631, + "wireBytes": 100576, + "latenciesMs": [ + 8.222161999999571, + 7.435686999999689, + 7.847580999999991, + 8.8180440000001, + 9.622455999999602, + 8.280225999999857, + 9.914570000000367, + 8.345248000000083, + 10.736985999999888, + 8.364767000000029, + 8.318075000000135, + 9.163736000000426, + 8.16568099999995, + 9.187541999999667, + 9.902484000000186, + 8.485404000000017 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 202.27937800000018, + "requestsPerSecond": 158.1970456721494, + "p50Ms": 47.355970999999954, + "p95Ms": 74.41215299999976, + "maxMs": 81.77438299999994, + "ttfbP95Ms": 74.21840299999985, + "cpuMs": 284.479, + "cpuMsPerRequest": 8.88996875, + "peakRssMiB": 157.90625, + "eventLoopP95Ms": 18.694143, + "wireBytes": 201152, + "latenciesMs": [ + 27.09392600000001, + 34.202831999999944, + 40.67928900000015, + 48.28666199999998, + 57.25572800000009, + 66.18402900000001, + 48.84129100000018, + 74.41215299999976, + 48.96815199999992, + 81.77438299999994, + 50.32567599999993, + 49.372105000000374, + 48.77755800000023, + 49.364054000000124, + 48.55755400000044, + 48.59274099999993, + 47.63851599999998, + 47.76144299999987, + 46.58066400000007, + 46.93522100000018, + 47.10854199999994, + 46.95772299999999, + 46.87438999999995, + 47.27120700000023, + 47.43494899999996, + 47.355970999999954, + 46.640128000000004, + 44.701792000000296, + 42.5035170000001, + 35.028025999999954, + 29.787738999999874, + 29.16061400000035 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 246.09007699999984, + "requestsPerSecond": 130.03368681135413, + "p50Ms": 59.39020299999993, + "p95Ms": 71.84271200000012, + "maxMs": 77.54610600000024, + "ttfbP95Ms": 71.31982800000014, + "cpuMs": 331.227, + "cpuMsPerRequest": 10.35084375, + "peakRssMiB": 170.53125, + "eventLoopP95Ms": 28.459007, + "wireBytes": 201152, + "latenciesMs": [ + 46.692201999999725, + 47.61932799999977, + 48.54332999999997, + 49.46384200000011, + 50.20099499999969, + 51.15816300000006, + 53.487113000000136, + 54.07325300000002, + 59.83527800000002, + 59.39020299999993, + 59.081502999999884, + 58.72152900000037, + 58.389936000000034, + 57.945634999999584, + 57.741321999999855, + 64.2627480000001, + 62.374309999999696, + 63.133557999999994, + 63.83143999999993, + 64.34165800000028, + 64.78523599999971, + 65.29908999999998, + 77.54610600000024, + 71.84271200000012, + 67.08917199999996, + 66.42171300000018, + 65.68672700000025, + 65.39457700000003, + 65.25941699999976, + 64.94840299999987, + 54.75441000000001, + 53.875838999999814 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 264.757591999999, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 709.8329450000001, + "ttfb": 708.441918, + "bytes": 6286, + "wallMs": 714.187297, + "cpuMs": 385.762 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 806.895896, + "requestsPerSecond": 19.82907594314992, + "p50Ms": 46.285527, + "p95Ms": 88.42466299999978, + "maxMs": 88.42466299999978, + "ttfbP95Ms": 87.80009400000017, + "cpuMs": 236.743, + "cpuMsPerRequest": 14.7964375, + "peakRssMiB": 146.18359375, + "eventLoopP95Ms": 23.003135, + "wireBytes": 100576, + "latenciesMs": [ + 36.888304999999946, + 57.44158500000003, + 56.037080999999944, + 50.142337999999654, + 48.77196099999992, + 46.285527, + 56.34347600000001, + 40.06601999999975, + 88.42466299999978, + 39.105986999999914, + 37.81787700000041, + 44.188852000000225, + 68.10151200000018, + 46.931972000000314, + 44.88915300000008, + 40.23559400000022 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 738.1818039999998, + "requestsPerSecond": 21.674877263704545, + "p50Ms": 43.46926600000006, + "p95Ms": 67.05987599999935, + "maxMs": 67.05987599999935, + "ttfbP95Ms": 66.62766399999964, + "cpuMs": 196.298, + "cpuMsPerRequest": 12.268625, + "peakRssMiB": 147.47265625, + "eventLoopP95Ms": 23.445503, + "wireBytes": 100576, + "latenciesMs": [ + 39.13114199999973, + 41.05593199999976, + 46.96286800000007, + 53.47285499999998, + 40.37874299999976, + 67.05987599999935, + 43.146381000000474, + 38.28179199999977, + 40.396890999999414, + 46.111471000000165, + 54.17170999999962, + 49.63622899999973, + 44.84316000000035, + 45.79168699999991, + 43.46926600000006, + 40.4942030000002 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1588.5994250000003, + "requestsPerSecond": 20.14352988954405, + "p50Ms": 365.12139299999944, + "p95Ms": 557.7260050000004, + "maxMs": 600.1873940000005, + "ttfbP95Ms": 557.4238050000004, + "cpuMs": 382.304, + "cpuMsPerRequest": 11.947, + "peakRssMiB": 151.078125, + "eventLoopP95Ms": 71.106559, + "wireBytes": 201152, + "latenciesMs": [ + 220.33113199999934, + 264.94155500000033, + 313.37240700000075, + 366.2215980000001, + 462.1094459999995, + 518.1971629999998, + 557.7260050000004, + 382.90504899999996, + 600.1873940000005, + 395.3335589999997, + 395.24677899999915, + 396.5842240000002, + 340.7891980000004, + 335.4595140000001, + 342.6871140000003, + 350.12788399999954, + 349.84108600000036, + 348.63724699999966, + 359.04961100000037, + 364.630451, + 367.2685280000005, + 365.12139299999944, + 368.7628279999999, + 379.62959200000023, + 380.18110700000034, + 380.23865899999964, + 372.8080920000002, + 371.84159399999953, + 347.20781500000066, + 343.22712299999966, + 305.44065500000033, + 254.29600800000026 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1494.9418400000004, + "requestsPerSecond": 21.405515013212817, + "p50Ms": 351.71258600000056, + "p95Ms": 419.9873259999995, + "maxMs": 424.66334800000004, + "ttfbP95Ms": 419.6729229999992, + "cpuMs": 324.389, + "cpuMsPerRequest": 10.13715625, + "peakRssMiB": 154.1328125, + "eventLoopP95Ms": 141.164543, + "wireBytes": 201152, + "latenciesMs": [ + 319.435391, + 320.27337700000044, + 321.1681779999999, + 321.9951719999999, + 322.711284, + 323.42133600000034, + 324.332093, + 373.96572900000047, + 330.9357570000002, + 330.695471, + 330.5438320000003, + 330.8146740000002, + 330.945111, + 330.8089979999995, + 330.8976339999999, + 342.49936700000035, + 362.0774760000004, + 362.3927130000002, + 362.73716199999944, + 362.631942, + 362.54122000000007, + 362.5503750000007, + 362.52498899999955, + 351.71258600000056, + 419.9873259999995, + 419.2876040000001, + 418.45445800000016, + 417.91445999999996, + 417.4497220000003, + 417.03378200000043, + 416.64368600000034, + 424.66334800000004 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "oldestAccess": 1793616304540, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 16533, + "storedBytes": 6286, + "allocatedBytes": 8192, + "oldestAccess": 1793616304905, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 32917, + "ms": 9.852014000000509, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 5.274275000000216, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 8.694196000000375, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 16533, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 6286, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 91.58035100000006, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 143.28455299999996, + "ttfb": 118.88409899999988, + "bytes": 100827, + "wallMs": 153.25853099999995, + "cpuMs": 161.476 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 891.0160429999996, + "requestsPerSecond": 17.957027963412333, + "p50Ms": 55.462078000000474, + "p95Ms": 58.03574600000002, + "maxMs": 58.03574600000002, + "ttfbP95Ms": 39.5414609999998, + "cpuMs": 722.032, + "cpuMsPerRequest": 45.127, + "peakRssMiB": 162.18359375, + "eventLoopP95Ms": 14.712831, + "wireBytes": 1613232, + "latenciesMs": [ + 58.03574600000002, + 57.48934099999997, + 55.462078000000474, + 57.83025400000042, + 54.88425300000017, + 56.591435000000274, + 56.004689999999755, + 54.49594199999956, + 56.1804689999999, + 53.58735699999943, + 54.76132999999936, + 55.68456200000037, + 56.039700999999695, + 52.84888900000078, + 52.45175899999958, + 53.28395999999975 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 885.5552750000006, + "requestsPerSecond": 18.067759801893775, + "p50Ms": 54.83537500000057, + "p95Ms": 57.828419999999824, + "maxMs": 57.828419999999824, + "ttfbP95Ms": 39.119807999999466, + "cpuMs": 679.909, + "cpuMsPerRequest": 42.4943125, + "peakRssMiB": 182.2734375, + "eventLoopP95Ms": 13.860863, + "wireBytes": 1613232, + "latenciesMs": [ + 57.828419999999824, + 54.22340199999962, + 56.67312999999922, + 56.014124000000265, + 54.34695499999998, + 56.235273000000234, + 52.90650199999982, + 53.376374000000396, + 55.73405600000024, + 56.24066500000026, + 53.8395959999998, + 54.67855099999997, + 55.28474300000016, + 53.43570700000055, + 54.83537500000057, + 56.086849999999686 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 519.0999089999996, + "requestsPerSecond": 61.645165882701065, + "p50Ms": 126.61032499999965, + "p95Ms": 141.20128300000033, + "maxMs": 143.19924600000013, + "ttfbP95Ms": 97.14479699999993, + "cpuMs": 1085.643, + "cpuMsPerRequest": 33.92634375, + "peakRssMiB": 226.78515625, + "eventLoopP95Ms": 64.782335, + "wireBytes": 3226464, + "latenciesMs": [ + 133.72019199999977, + 133.1583440000004, + 139.81545199999982, + 138.79288300000007, + 141.20128300000033, + 140.39711700000043, + 140.9992259999999, + 143.19924600000013, + 124.29028600000038, + 130.58541100000002, + 124.69369000000006, + 128.40795799999978, + 125.81126700000004, + 126.76229599999988, + 126.52312200000051, + 126.61032499999965, + 121.17045099999996, + 108.93421899999976, + 117.8923850000001, + 116.7894409999999, + 123.840733, + 119.36769900000036, + 117.86507799999981, + 121.08742299999994, + 119.9420169999994, + 127.69389599999977, + 121.42212299999937, + 130.10403499999939, + 127.66633300000012, + 127.47485099999994, + 130.50587300000007, + 123.39098999999987 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 512.0819660000006, + "requestsPerSecond": 62.48999598630653, + "p50Ms": 125.54165100000046, + "p95Ms": 136.43479599999955, + "maxMs": 138.43962900000042, + "ttfbP95Ms": 99.77451399999973, + "cpuMs": 1204.406, + "cpuMsPerRequest": 37.6376875, + "peakRssMiB": 246.11328125, + "eventLoopP95Ms": 52.166655, + "wireBytes": 3226464, + "latenciesMs": [ + 116.70467199999985, + 119.23554100000001, + 119.47659300000032, + 123.26098300000012, + 123.78800500000034, + 125.18311999999969, + 125.54165100000046, + 127.7409520000001, + 125.15290199999981, + 133.17539899999974, + 131.15919900000063, + 127.7666650000001, + 129.3326850000003, + 129.47777900000074, + 131.65528600000016, + 138.43962900000042, + 113.543095, + 111.93923300000006, + 123.60471600000074, + 122.81292699999995, + 123.1258029999999, + 122.06220800000028, + 118.77640599999995, + 118.48168999999962, + 129.73165900000004, + 136.43479599999955, + 130.8258390000001, + 128.03748300000007, + 130.4485420000001, + 128.29576400000042, + 133.18516700000055, + 131.29669699999977 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 312.88601200000267, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 129.33012199999985, + "ttfb": 108.11814099999992, + "bytes": 100827, + "wallMs": 135.883284, + "cpuMs": 142.908 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 562.7365059999997, + "requestsPerSecond": 28.432489858761727, + "p50Ms": 33.290394000000106, + "p95Ms": 43.9042629999999, + "maxMs": 43.9042629999999, + "ttfbP95Ms": 26.391853000000083, + "cpuMs": 710.674, + "cpuMsPerRequest": 44.417125, + "peakRssMiB": 167.1015625, + "eventLoopP95Ms": 12.861439, + "wireBytes": 1613232, + "latenciesMs": [ + 35.7003179999997, + 37.37025100000028, + 34.1115420000001, + 43.9042629999999, + 42.085509999999886, + 40.200170999999955, + 39.39937000000009, + 38.031469000000016, + 33.290394000000106, + 32.99183800000037, + 32.99866599999996, + 30.296424000000115, + 27.464907999999923, + 29.775762999999642, + 27.358525999999983, + 30.96389199999976 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 483.726987, + "requestsPerSecond": 33.07650891927599, + "p50Ms": 29.94747099999995, + "p95Ms": 34.77320099999997, + "maxMs": 34.77320099999997, + "ttfbP95Ms": 20.252014000000145, + "cpuMs": 579.255, + "cpuMsPerRequest": 36.2034375, + "peakRssMiB": 193.83984375, + "eventLoopP95Ms": 13.279231, + "wireBytes": 1613232, + "latenciesMs": [ + 32.763570999999956, + 34.77320099999997, + 29.546221999999943, + 27.763558999999987, + 30.78198399999974, + 29.956807000000026, + 26.72659500000009, + 30.97776900000008, + 31.745250999999826, + 28.19090499999993, + 29.94747099999995, + 29.967271999999866, + 27.441047000000253, + 29.59277800000018, + 27.159414000000197, + 32.265683999999965 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 487.5125780000003, + "requestsPerSecond": 65.63933207893557, + "p50Ms": 123.92487399999982, + "p95Ms": 154.1931540000005, + "maxMs": 160.23643999999967, + "ttfbP95Ms": 106.51765199999954, + "cpuMs": 1292.278, + "cpuMsPerRequest": 40.3836875, + "peakRssMiB": 233, + "eventLoopP95Ms": 18.071551, + "wireBytes": 3226464, + "latenciesMs": [ + 101.63391699999966, + 113.63624400000026, + 123.25958300000002, + 123.92487399999982, + 135.192098, + 136.10733800000025, + 152.40738999999985, + 153.16629899999998, + 120.59358599999996, + 132.47396899999967, + 122.35015599999997, + 124.47089199999982, + 116.17714100000012, + 132.01114000000052, + 116.57073200000013, + 127.37548500000003, + 154.1931540000005, + 141.73106600000028, + 143.69614899999942, + 147.14469700000063, + 139.36983699999928, + 160.23643999999967, + 149.06074800000079, + 143.5682850000003, + 92.04484299999967, + 80.92233099999976, + 81.87077499999941, + 78.16522700000041, + 69.4404999999997, + 62.15679799999998, + 70.40236000000004, + 59.06387799999993 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 283.945283, + "requestsPerSecond": 112.69776930930738, + "p50Ms": 66.91189399999985, + "p95Ms": 92.90836800000034, + "maxMs": 92.96181100000013, + "ttfbP95Ms": 52.457800000000134, + "cpuMs": 1049.219, + "cpuMsPerRequest": 32.78809375, + "peakRssMiB": 228.51171875, + "eventLoopP95Ms": 19.398655, + "wireBytes": 3226464, + "latenciesMs": [ + 63.59044599999925, + 64.44394399999965, + 65.56513599999926, + 68.90784499999972, + 71.77506000000085, + 74.60701999999947, + 74.85958599999958, + 77.65941199999997, + 60.129986999999346, + 61.30537499999991, + 64.00876900000003, + 70.25759800000014, + 65.09130699999969, + 70.17867999999999, + 92.96181100000013, + 92.90836800000034, + 73.19821299999967, + 76.10993599999983, + 71.76622600000064, + 73.67775900000015, + 77.25090100000034, + 83.65232900000046, + 63.73713399999997, + 69.66899199999989, + 60.85695599999963, + 57.89054399999986, + 66.91189399999985, + 55.265158000000156, + 55.99918499999967, + 51.80607600000076, + 48.1837830000004, + 42.45047800000066 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 266.65551999999616, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 750.921914, + "ttfb": 747.41786, + "bytes": 100827, + "wallMs": 761.7940060000001, + "cpuMs": 451.559 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 823.6535199999998, + "requestsPerSecond": 19.425643928529563, + "p50Ms": 41.30984099999978, + "p95Ms": 156.7961190000001, + "maxMs": 156.7961190000001, + "ttfbP95Ms": 155.07862599999999, + "cpuMs": 227.74, + "cpuMsPerRequest": 14.23375, + "peakRssMiB": 152.3984375, + "eventLoopP95Ms": 30.949375, + "wireBytes": 1613232, + "latenciesMs": [ + 69.48912400000017, + 156.7961190000001, + 44.775517000000036, + 40.55120600000009, + 57.30117700000028, + 43.69854499999974, + 43.21045700000013, + 37.964004000000386, + 37.51251000000002, + 47.534593000000314, + 36.85829999999987, + 41.30984099999978, + 38.06589699999995, + 49.086121999999705, + 38.6820689999995, + 35.92315299999973 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 905.8143770000006, + "requestsPerSecond": 17.663663114943017, + "p50Ms": 46.04954099999941, + "p95Ms": 182.8297620000003, + "maxMs": 182.8297620000003, + "ttfbP95Ms": 180.4098010000007, + "cpuMs": 236.595, + "cpuMsPerRequest": 14.7871875, + "peakRssMiB": 159.1015625, + "eventLoopP95Ms": 30.310399, + "wireBytes": 1613232, + "latenciesMs": [ + 39.64413699999932, + 42.29041199999938, + 42.63818700000047, + 40.63879000000088, + 39.45306999999957, + 47.22768200000064, + 55.64117199999964, + 46.04954099999941, + 42.188192999999956, + 58.904350999999224, + 45.627064999999675, + 54.85039400000005, + 46.59404199999972, + 60.83825700000034, + 56.583927000000585, + 182.8297620000003 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1613.0051729999996, + "requestsPerSecond": 19.838746047220525, + "p50Ms": 413.2137410000005, + "p95Ms": 488.5399289999996, + "maxMs": 540.62727, + "ttfbP95Ms": 486.70694099999946, + "cpuMs": 476.594, + "cpuMsPerRequest": 14.8935625, + "peakRssMiB": 171.4765625, + "eventLoopP95Ms": 75.825151, + "wireBytes": 3226464, + "latenciesMs": [ + 190.87208199999986, + 225.26912300000004, + 272.4201400000002, + 330.2282409999998, + 375.9575139999997, + 437.895724, + 488.5399289999996, + 350.8852399999996, + 540.62727, + 364.499812, + 410.057374, + 428.86041099999966, + 426.18649000000005, + 417.64618299999984, + 413.2137410000005, + 417.2589369999996, + 423.8034089999992, + 458.1428129999995, + 424.63095599999997, + 414.2011480000001, + 416.39356299999963, + 414.54623399999946, + 432.78814499999953, + 426.9301290000003, + 427.1840550000006, + 404.31841799999984, + 411.31324700000005, + 377.2700870000008, + 349.4076869999999, + 316.6095729999997, + 263.3645239999996, + 221.73267299999952 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1478.3938450000005, + "requestsPerSecond": 21.645111759782786, + "p50Ms": 324.78666599999906, + "p95Ms": 465.1352159999997, + "maxMs": 466.4251610000001, + "ttfbP95Ms": 462.88201799999933, + "cpuMs": 400.421, + "cpuMsPerRequest": 12.51315625, + "peakRssMiB": 184.07421875, + "eventLoopP95Ms": 157.548543, + "wireBytes": 3226464, + "latenciesMs": [ + 259.7584139999999, + 262.8043200000002, + 266.0025420000002, + 269.11310499999945, + 272.10390499999994, + 275.2994869999993, + 278.20180399999936, + 280.64305799999966, + 420.2750070000002, + 419.1436569999996, + 418.0307849999999, + 416.8596349999998, + 415.9207100000003, + 415.7604339999998, + 414.97927400000026, + 414.6124950000003, + 459.76982899999985, + 458.39102100000036, + 464.5239160000001, + 462.68329300000005, + 463.72653400000036, + 463.8137919999999, + 465.1352159999997, + 466.4251610000001, + 324.78666599999906, + 323.3216799999991, + 321.41201399999954, + 320.68179900000086, + 319.2159720000009, + 317.7571850000004, + 316.13627500000075, + 314.56835299999966 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "oldestAccess": 1793616324690, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 8, + "decisions": 0 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "oldestAccess": null, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 27.535251000000244, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 15.26551500000005, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 5.96140400000013, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 104.82533899999999, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 119.53168000000005, + "ttfb": 92.64723400000003, + "bytes": 100797, + "wallMs": 124.60674299999982, + "cpuMs": 228.253 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 865.5035080000002, + "requestsPerSecond": 18.486349104433664, + "p50Ms": 54.0095409999999, + "p95Ms": 58.098721000000296, + "maxMs": 58.098721000000296, + "ttfbP95Ms": 43.727386000000024, + "cpuMs": 679.01, + "cpuMsPerRequest": 42.438125, + "peakRssMiB": 174.1171875, + "eventLoopP95Ms": 25.231359, + "wireBytes": 1612752, + "latenciesMs": [ + 54.353689999999915, + 50.92360899999994, + 51.64697499999966, + 50.43488699999989, + 52.595560000000205, + 57.43847699999969, + 58.098721000000296, + 55.461636, + 57.65063199999986, + 56.60951000000023, + 54.0095409999999, + 55.324513000000024, + 51.45664099999976, + 56.36698500000011, + 47.48152800000025, + 50.7556340000001 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 881.5541519999997, + "requestsPerSecond": 18.149764213236903, + "p50Ms": 54.27345100000002, + "p95Ms": 60.547341000000415, + "maxMs": 60.547341000000415, + "ttfbP95Ms": 43.98110900000029, + "cpuMs": 666.79, + "cpuMsPerRequest": 41.674375, + "peakRssMiB": 202.109375, + "eventLoopP95Ms": 20.152319, + "wireBytes": 1612752, + "latenciesMs": [ + 49.178073999999924, + 52.51783899999964, + 57.38184600000022, + 60.547341000000415, + 53.95742000000064, + 52.22267300000021, + 54.27345100000002, + 58.24037799999951, + 56.47099100000014, + 56.758646000000226, + 55.21528500000022, + 57.34966799999984, + 51.24712200000067, + 55.03871100000015, + 54.24165200000061, + 53.41335100000015 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 798.3331699999999, + "requestsPerSecond": 40.08351550769211, + "p50Ms": 174.1034469999995, + "p95Ms": 282.8487609999993, + "maxMs": 285.0575170000002, + "ttfbP95Ms": 181.36131999999998, + "cpuMs": 1370.452, + "cpuMsPerRequest": 42.826625, + "peakRssMiB": 251.96875, + "eventLoopP95Ms": 73.859071, + "wireBytes": 3225504, + "latenciesMs": [ + 170.60483699999986, + 170.14605500000016, + 176.62408600000072, + 178.6540589999995, + 176.71896300000026, + 178.84266599999955, + 180.66665899999953, + 182.77300600000035, + 166.16407900000013, + 162.46340899999996, + 162.37529200000063, + 174.1034469999995, + 171.2346469999993, + 170.1370820000002, + 173.30720099999962, + 171.2927149999996, + 273.2919410000004, + 266.97501400000056, + 264.1740469999995, + 285.0575170000002, + 276.29531399999996, + 282.8487609999993, + 270.21581400000014, + 273.42909600000075, + 173.18131899999935, + 171.21601499999997, + 169.2144819999994, + 171.5465379999996, + 175.70141299999977, + 170.61679999999978, + 175.51527499999975, + 170.26530999999977 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 358.96176299999934, + "requestsPerSecond": 89.14598516722813, + "p50Ms": 88.16918700000042, + "p95Ms": 97.33504999999968, + "maxMs": 97.4063699999997, + "ttfbP95Ms": 73.63567499999954, + "cpuMs": 723.715, + "cpuMsPerRequest": 22.61609375, + "peakRssMiB": 244.3046875, + "eventLoopP95Ms": 41.582591, + "wireBytes": 3225504, + "latenciesMs": [ + 88.16918700000042, + 90.55017500000031, + 91.4816979999996, + 94.25223899999946, + 95.92856000000029, + 96.53031399999963, + 97.33504999999968, + 97.4063699999997, + 87.04880299999968, + 88.3127000000004, + 94.72711299999992, + 90.02090500000031, + 88.44203900000048, + 88.26273500000025, + 87.76901100000032, + 88.773596, + 82.17445099999986, + 80.23981899999944, + 82.50067399999989, + 93.63934099999915, + 84.65978300000006, + 87.49616400000014, + 87.02474900000016, + 88.19798900000023, + 86.8213139999998, + 83.21897799999988, + 82.60851000000002, + 88.98622100000011, + 85.51289900000029, + 82.48913799999991, + 83.32646400000067, + 82.92491500000051 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 573.9464820000021, + "b0": 0, + "b1": 0, + "b2": 94, + "b3": 6, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 100.41967600000021, + "ttfb": 84.22142800000006, + "bytes": 100797, + "wallMs": 105.55533500000001, + "cpuMs": 100.362 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 530.3675990000002, + "requestsPerSecond": 30.167755402418532, + "p50Ms": 33.37505600000031, + "p95Ms": 39.91167399999995, + "maxMs": 39.91167399999995, + "ttfbP95Ms": 24.25603000000001, + "cpuMs": 643.571, + "cpuMsPerRequest": 40.2231875, + "peakRssMiB": 178.28125, + "eventLoopP95Ms": 17.285119, + "wireBytes": 1612752, + "latenciesMs": [ + 36.49021599999992, + 37.12631699999997, + 34.61522499999978, + 39.535489000000325, + 35.491262000000006, + 33.7920509999999, + 27.720479999999952, + 29.819648000000143, + 31.42261899999994, + 33.37505600000031, + 28.134672000000137, + 25.38419299999987, + 28.399790999999823, + 39.91167399999995, + 28.9843350000001, + 36.35856100000001 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 689.3028119999999, + "requestsPerSecond": 23.211859463587974, + "p50Ms": 41.30713700000024, + "p95Ms": 57.35193299999992, + "maxMs": 57.35193299999992, + "ttfbP95Ms": 37.62338, + "cpuMs": 724.307, + "cpuMsPerRequest": 45.2691875, + "peakRssMiB": 215.1875, + "eventLoopP95Ms": 21.118975, + "wireBytes": 1612752, + "latenciesMs": [ + 39.59097699999984, + 31.644250999999713, + 37.53565299999991, + 42.344572999999855, + 41.30713700000024, + 42.17161799999985, + 48.18443900000011, + 39.706342000000404, + 38.27148299999999, + 53.95963900000015, + 51.46130499999981, + 48.5608830000001, + 33.15175099999988, + 35.83499200000006, + 57.35193299999992, + 43.408358000000135 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 718.8009710000001, + "requestsPerSecond": 44.51858204292826, + "p50Ms": 166.80554999999958, + "p95Ms": 252.53561500000023, + "maxMs": 254.2171599999997, + "ttfbP95Ms": 194.43425099999968, + "cpuMs": 1351.255, + "cpuMsPerRequest": 42.22671875, + "peakRssMiB": 244.91015625, + "eventLoopP95Ms": 30.375935, + "wireBytes": 3225504, + "latenciesMs": [ + 147.10476299999982, + 145.79838900000004, + 166.80554999999958, + 168.551743, + 178.39362699999992, + 208.4785240000001, + 210.84478400000035, + 244.30034299999988, + 252.53561500000023, + 252.0254030000001, + 240.1876339999999, + 254.2171599999997, + 250.78685799999994, + 230.72474699999975, + 236.28160200000002, + 206.61923099999967, + 163.44927199999984, + 172.92043000000012, + 169.75968599999987, + 164.11930200000006, + 163.64352400000007, + 156.44775800000025, + 163.5606170000001, + 171.28586899999982, + 111.81582100000014, + 120.0836419999996, + 113.67230800000016, + 115.22585500000014, + 110.67167500000005, + 114.7055519999999, + 100.7394989999998, + 88.53892200000018 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 471.889005, + "requestsPerSecond": 67.81255689566235, + "p50Ms": 117.37911199999962, + "p95Ms": 126.64290699999947, + "maxMs": 127.85221900000033, + "ttfbP95Ms": 99.67951999999968, + "cpuMs": 1047.81, + "cpuMsPerRequest": 32.7440625, + "peakRssMiB": 268.109375, + "eventLoopP95Ms": 43.909119, + "wireBytes": 3225504, + "latenciesMs": [ + 112.4219619999999, + 113.82167299999992, + 112.81461500000023, + 113.67637700000023, + 116.3330249999999, + 116.39108699999997, + 117.68415000000005, + 117.70886999999993, + 94.4843149999997, + 95.97489200000018, + 97.96995399999969, + 100.22404300000017, + 103.783007, + 109.8773799999999, + 105.99056599999994, + 107.7861810000004, + 124.74005399999987, + 125.38232299999981, + 124.8372330000002, + 124.92435999999998, + 127.85221900000033, + 125.02806700000019, + 126.64290699999947, + 126.5666339999998, + 117.69684300000063, + 120.42525699999987, + 120.57758600000034, + 119.18417299999965, + 115.79103399999985, + 118.44665200000054, + 117.37911199999962, + 118.31811199999993 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 541.1927849999972, + "b0": 0, + "b1": 0, + "b2": 97, + "b3": 3, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 726.5002400000001, + "ttfb": 724.8030190000002, + "bytes": 100797, + "wallMs": 732.6071909999998, + "cpuMs": 440.003 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 790.068968, + "requestsPerSecond": 20.251396584405526, + "p50Ms": 45.87229100000013, + "p95Ms": 73.79595599999993, + "maxMs": 73.79595599999993, + "ttfbP95Ms": 71.67768799999976, + "cpuMs": 264.051, + "cpuMsPerRequest": 16.5031875, + "peakRssMiB": 154.34375, + "eventLoopP95Ms": 25.395199, + "wireBytes": 1612752, + "latenciesMs": [ + 38.30988899999966, + 43.270452000000205, + 40.28965900000003, + 61.678457999999864, + 43.64722000000029, + 36.030379000000266, + 45.87229100000013, + 67.9050100000004, + 51.859950000000026, + 37.572271999999884, + 43.142535999999836, + 48.998613000000205, + 45.90327400000024, + 73.79595599999993, + 58.16343000000006, + 47.779113999999936 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 780.6550759999996, + "requestsPerSecond": 20.495607460829486, + "p50Ms": 45.89932399999998, + "p95Ms": 78.7387060000001, + "maxMs": 78.7387060000001, + "ttfbP95Ms": 76.18128800000068, + "cpuMs": 256.073, + "cpuMsPerRequest": 16.0045625, + "peakRssMiB": 160.78515625, + "eventLoopP95Ms": 25.673727, + "wireBytes": 1612752, + "latenciesMs": [ + 38.53768600000012, + 53.1634039999999, + 45.89932399999998, + 43.95061399999986, + 53.242749, + 40.94096300000001, + 41.23426399999971, + 43.803116000000045, + 78.7387060000001, + 43.21148400000038, + 51.43771199999992, + 48.84506099999999, + 49.72251299999971, + 43.498303999999735, + 48.89673599999969, + 51.07411400000001 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1466.9548949999999, + "requestsPerSecond": 21.81389496641613, + "p50Ms": 333.840013, + "p95Ms": 543.2748780000002, + "maxMs": 577.46648, + "ttfbP95Ms": 542.1847530000005, + "cpuMs": 432.679, + "cpuMsPerRequest": 13.52121875, + "peakRssMiB": 173.16015625, + "eventLoopP95Ms": 66.584575, + "wireBytes": 3225504, + "latenciesMs": [ + 207.62039099999947, + 257.5458579999995, + 326.11988399999973, + 392.5139169999993, + 444.0948499999995, + 497.1007719999998, + 543.2748780000002, + 371.6877260000001, + 577.46648, + 366.40633100000014, + 386.25091000000066, + 387.9789389999996, + 377.4731300000003, + 374.72626000000037, + 366.0565349999997, + 368.79865900000004, + 369.42629300000044, + 363.0322099999994, + 329.8302569999996, + 317.64296099999956, + 316.02943200000027, + 315.0441030000002, + 328.6353230000004, + 333.840013, + 333.5326020000002, + 337.68504999999914, + 330.2041100000006, + 307.003694, + 285.35335100000066, + 253.89460400000007, + 214.3287190000001, + 183.6434220000001 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1308.72393, + "requestsPerSecond": 24.451298907631344, + "p50Ms": 301.9586449999997, + "p95Ms": 415.8406419999992, + "maxMs": 416.9751690000003, + "ttfbP95Ms": 413.95588300000054, + "cpuMs": 339.95, + "cpuMsPerRequest": 10.6234375, + "peakRssMiB": 185.7578125, + "eventLoopP95Ms": 109.903871, + "wireBytes": 3225504, + "latenciesMs": [ + 247.88750600000003, + 248.98599100000047, + 250.0465209999993, + 251.03024499999992, + 252.18231899999955, + 253.3301539999993, + 256.21376899999996, + 257.325511, + 300.79393400000026, + 300.77965099999983, + 299.51441199999954, + 301.9586449999997, + 300.76088400000026, + 300.7558309999995, + 301.0063620000001, + 301.0036399999999, + 318.3190420000001, + 320.4046470000003, + 322.48939100000007, + 324.50567799999953, + 326.38565800000015, + 328.17515000000003, + 331.8919599999999, + 332.942309, + 413.6214690000006, + 411.9732439999998, + 410.28970200000003, + 408.7154359999995, + 407.24046199999975, + 416.9751690000003, + 415.8406419999992, + 415.4227799999999 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "oldestAccess": 1793616343258, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "oldestAccess": 1793616343582, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 8, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 52.486295000000155, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 12.005188999999973, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 10.196158000000196, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 86.2855199999999, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2426.6078500000003, + "ttfb": 2256.588366, + "bytes": 799931, + "wallMs": 2458.407117, + "cpuMs": 3358.772 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4152.823313000001, + "requestsPerSecond": 3.8528005633934845, + "p50Ms": 255.883425, + "p95Ms": 293.48221399999966, + "maxMs": 293.48221399999966, + "ttfbP95Ms": 96.50909000000047, + "cpuMs": 6237.535, + "cpuMsPerRequest": 389.8459375, + "peakRssMiB": 301.6875, + "eventLoopP95Ms": 17.760255, + "wireBytes": 12798896, + "latenciesMs": [ + 266.84816599999976, + 264.18387299999995, + 271.4340509999993, + 290.4703930000005, + 258.82315000000017, + 242.96619900000042, + 255.883425, + 233.35244500000044, + 248.68435900000077, + 271.0673820000011, + 240.30934800000068, + 247.33098299999983, + 240.55364100000043, + 270.5351160000009, + 252.32396900000094, + 293.48221399999966 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4009.1861820000013, + "requestsPerSecond": 3.9908348661469057, + "p50Ms": 251.44564899999932, + "p95Ms": 271.4456769999997, + "maxMs": 271.4456769999997, + "ttfbP95Ms": 88.98878999999943, + "cpuMs": 7091.113, + "cpuMsPerRequest": 443.1945625, + "peakRssMiB": 301.19140625, + "eventLoopP95Ms": 18.808831, + "wireBytes": 12798896, + "latenciesMs": [ + 251.44564899999932, + 243.22188500000084, + 263.9004699999987, + 256.7662760000003, + 223.0017169999992, + 218.71618300000046, + 251.28764700000102, + 254.92677600000025, + 240.04349100000036, + 244.06169099999897, + 245.60776599999917, + 262.9176299999999, + 259.66564500000095, + 256.3387160000002, + 261.4437999999991, + 271.4456769999997 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2077.958877000001, + "requestsPerSecond": 15.399727277663535, + "p50Ms": 486.8425950000001, + "p95Ms": 694.7293669999999, + "maxMs": 722.9565430000002, + "ttfbP95Ms": 322.6264379999993, + "cpuMs": 9457.905, + "cpuMsPerRequest": 295.55953125, + "peakRssMiB": 323.9375, + "eventLoopP95Ms": 29.081599, + "wireBytes": 25597792, + "latenciesMs": [ + 436.53533699999934, + 486.8425950000001, + 546.2356479999999, + 561.8750880000007, + 625.3960699999989, + 679.893782000001, + 694.7293669999999, + 722.9565430000002, + 456.71866300000147, + 455.4521759999989, + 458.55112499999996, + 453.8735889999989, + 484.77882899999895, + 467.4895149999993, + 501.53500899999926, + 508.80037600000105, + 486.786349, + 512.8835029999991, + 541.1036129999993, + 528.6642709999996, + 520.661881, + 487.80370799999946, + 513.2197670000005, + 505.12007599999924, + 508.44544999999925, + 481.58238300000085, + 449.41642800000045, + 466.0038769999992, + 402.41998799999965, + 383.3060380000006, + 362.7710879999995, + 335.34743699999854 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2159.043729000001, + "requestsPerSecond": 14.821376505802114, + "p50Ms": 505.4080990000002, + "p95Ms": 733.722689000002, + "maxMs": 746.4211670000004, + "ttfbP95Ms": 331.7703560000009, + "cpuMs": 9932.089, + "cpuMsPerRequest": 310.37778125, + "peakRssMiB": 322.7109375, + "eventLoopP95Ms": 30.932991, + "wireBytes": 25597792, + "latenciesMs": [ + 493.8936869999998, + 544.6519910000025, + 566.360474000001, + 636.2519029999967, + 651.3881590000019, + 722.4359729999996, + 733.722689000002, + 746.4211670000004, + 487.65000900000086, + 495.71255799999926, + 481.95012900000074, + 502.5784190000013, + 498.4074249999976, + 501.02211700000043, + 531.7432040000022, + 529.3541340000011, + 512.1068429999978, + 527.9545729999991, + 529.4167129999987, + 491.86889900000097, + 571.2931499999977, + 490.6938999999984, + 522.3158320000002, + 529.4993700000014, + 513.1234999999979, + 485.89848699999857, + 505.4080990000002, + 452.1620299999995, + 404.5023599999986, + 413.6434450000015, + 367.2495490000001, + 351.0678399999997 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 5304.313006000015, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 93, + "b4": 6, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 3196.414003, + "ttfb": 3015.214312, + "bytes": 799931, + "wallMs": 3227.80089, + "cpuMs": 4048.859 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4140.200433000001, + "requestsPerSecond": 3.8645472022247858, + "p50Ms": 256.0359649999991, + "p95Ms": 301.6853600000004, + "maxMs": 301.6853600000004, + "ttfbP95Ms": 104.51162099999965, + "cpuMs": 7377.549, + "cpuMsPerRequest": 461.0968125, + "peakRssMiB": 309.7421875, + "eventLoopP95Ms": 11.517951, + "wireBytes": 12798896, + "latenciesMs": [ + 301.6853600000004, + 258.4111240000002, + 251.33477500000026, + 277.6389229999995, + 287.52693100000033, + 266.04177700000037, + 279.96264600000086, + 271.3533579999985, + 250.81116699999984, + 245.9996319999991, + 256.0359649999991, + 234.55334399999992, + 210.42471900000055, + 208.21551399999953, + 251.0636770000001, + 284.20454400000017 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 3898.788623999999, + "requestsPerSecond": 4.103838792774728, + "p50Ms": 241.60625999999866, + "p95Ms": 275.10719699999936, + "maxMs": 275.10719699999936, + "ttfbP95Ms": 93.68456800000058, + "cpuMs": 7636.5, + "cpuMsPerRequest": 477.28125, + "peakRssMiB": 301.24609375, + "eventLoopP95Ms": 11.263999, + "wireBytes": 12798896, + "latenciesMs": [ + 230.21009699999922, + 266.00791299999946, + 260.38527799999974, + 239.80031299999973, + 235.60485300000073, + 234.10793399999966, + 223.65459700000065, + 241.60625999999866, + 275.10719699999936, + 248.01368600000023, + 235.82060699999965, + 245.21151099999952, + 220.3096719999994, + 244.8534550000004, + 247.71782200000052, + 245.65739100000064 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2421.547856000001, + "requestsPerSecond": 13.21468825020817, + "p50Ms": 581.0352569999995, + "p95Ms": 734.3340439999993, + "maxMs": 776.9902320000001, + "ttfbP95Ms": 435.07354699999996, + "cpuMs": 10772.41, + "cpuMsPerRequest": 336.6378125, + "peakRssMiB": 321.12109375, + "eventLoopP95Ms": 13.385727, + "wireBytes": 25597792, + "latenciesMs": [ + 532.4585139999999, + 559.2952960000002, + 600.4938340000008, + 639.1486729999997, + 669.5077430000001, + 712.3043780000007, + 734.3340439999993, + 776.9902320000001, + 567.2573839999986, + 589.7273669999995, + 584.2590579999996, + 576.9265629999991, + 578.9782230000001, + 581.0352569999995, + 616.3299920000009, + 598.7325810000002, + 606.2512269999988, + 597.5849429999998, + 582.8093800000006, + 595.5047799999975, + 609.7240739999979, + 574.4145130000015, + 587.9700749999993, + 575.989744999999, + 564.8554600000007, + 577.9109390000012, + 576.9553079999987, + 541.295005, + 517.7461250000015, + 516.4244680000011, + 466.32384699999966, + 462.2063899999994 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2352.3628210000024, + "requestsPerSecond": 13.603343716509098, + "p50Ms": 565.2894790000028, + "p95Ms": 685.2791319999997, + "maxMs": 744.020026000002, + "ttfbP95Ms": 373.16291099999944, + "cpuMs": 9890.892, + "cpuMsPerRequest": 309.090375, + "peakRssMiB": 328.12890625, + "eventLoopP95Ms": 13.647871, + "wireBytes": 25597792, + "latenciesMs": [ + 487.8695750000006, + 494.44777500000055, + 569.5136540000021, + 574.5996640000012, + 619.5865909999993, + 656.7332409999981, + 685.2791319999997, + 744.020026000002, + 608.3264089999975, + 625.7815120000014, + 574.0656250000029, + 624.2231460000003, + 610.377378000001, + 631.521510999999, + 634.0923870000006, + 578.8332260000025, + 555.2338229999987, + 568.7351009999984, + 561.9184610000011, + 537.6773159999975, + 542.1888189999991, + 533.7670880000005, + 555.2086720000007, + 566.768211999999, + 565.2894790000028, + 554.0885759999983, + 550.0759690000014, + 538.0729759999995, + 513.0015899999999, + 491.1099869999998, + 466.5286359999991, + 460.7215380000016 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 6012.852258000008, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 93, + "b4": 6, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 4126.612338999999, + "ttfb": 4104.240417000001, + "bytes": 799931, + "wallMs": 4168.938039, + "cpuMs": 4888.647 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 1089.6692900000007, + "requestsPerSecond": 14.683354066076314, + "p50Ms": 62.41555300000073, + "p95Ms": 121.58892000000014, + "maxMs": 121.58892000000014, + "ttfbP95Ms": 104.25119900000027, + "cpuMs": 656.268, + "cpuMsPerRequest": 41.01675, + "peakRssMiB": 298.37890625, + "eventLoopP95Ms": 23.461887, + "wireBytes": 12798896, + "latenciesMs": [ + 57.22816899999998, + 71.06716700000015, + 67.27516999999989, + 57.417178000000604, + 70.16900199999964, + 64.82004599999982, + 60.4577220000001, + 58.16478400000051, + 67.90412800000013, + 60.07063600000038, + 62.41555300000073, + 73.70610900000065, + 121.58892000000014, + 58.819924999999785, + 59.695764000000054, + 72.35016400000131 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 1102.9175320000013, + "requestsPerSecond": 14.506977662224687, + "p50Ms": 68.26128699999936, + "p95Ms": 97.30169900000146, + "maxMs": 97.30169900000146, + "ttfbP95Ms": 79.34610300000168, + "cpuMs": 1172.696, + "cpuMsPerRequest": 73.2935, + "peakRssMiB": 298.37890625, + "eventLoopP95Ms": 26.755071, + "wireBytes": 12798896, + "latenciesMs": [ + 53.53008799999952, + 53.60210999999981, + 55.54395300000033, + 68.26128699999936, + 73.98088800000005, + 65.6038150000004, + 68.62478999999985, + 68.38727300000028, + 97.30169900000146, + 60.52322599999934, + 62.905187000000296, + 58.69552900000053, + 88.28310799999963, + 72.26467899999989, + 68.492443000001, + 81.77631099999962 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2066.7478360000005, + "requestsPerSecond": 15.483262855101396, + "p50Ms": 518.3572469999999, + "p95Ms": 632.5175650000001, + "maxMs": 665.9451040000004, + "ttfbP95Ms": 354.72332300000016, + "cpuMs": 1601.957, + "cpuMsPerRequest": 50.06115625, + "peakRssMiB": 297.26171875, + "eventLoopP95Ms": 70.713343, + "wireBytes": 25597792, + "latenciesMs": [ + 403.1136779999997, + 404.68631300000015, + 472.3097319999997, + 473.8375589999996, + 513.1568820000011, + 558.5696169999992, + 632.5175650000001, + 665.9451040000004, + 540.8559980000009, + 546.0680949999987, + 518.917453, + 518.3572469999999, + 533.2498799999994, + 522.4427820000001, + 519.6123079999998, + 532.936882, + 498.90051400000084, + 497.5042939999985, + 508.1282969999993, + 508.500951, + 532.1574120000005, + 524.6599340000012, + 553.8423739999998, + 539.8736630000003, + 529.7622969999993, + 529.0919180000001, + 513.1591450000014, + 513.208772, + 452.788235, + 436.326348999999, + 345.81436100000064, + 320.95980000000054 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2075.829573000001, + "requestsPerSecond": 15.4155237097588, + "p50Ms": 491.5439529999985, + "p95Ms": 601.4713030000003, + "maxMs": 602.0362619999996, + "ttfbP95Ms": 482.8590660000009, + "cpuMs": 1447.504, + "cpuMsPerRequest": 45.2345, + "peakRssMiB": 297.609375, + "eventLoopP95Ms": 118.030335, + "wireBytes": 25597792, + "latenciesMs": [ + 371.15556800000013, + 371.8798570000017, + 372.5161769999995, + 373.1779029999998, + 373.73121700000047, + 374.7404769999994, + 375.5189420000006, + 417.1472730000005, + 573.0164480000003, + 573.3586720000003, + 574.0834270000014, + 574.1153599999998, + 574.1358869999985, + 574.3620260000007, + 574.556842, + 600.7564860000002, + 467.2486179999996, + 466.99697299999934, + 466.7649770000007, + 466.9674520000008, + 467.05097600000045, + 466.9306429999997, + 467.02344899999844, + 491.5439529999985, + 602.0362619999996, + 601.4713030000003, + 600.9836569999989, + 600.2750819999983, + 599.6444159999992, + 598.9951409999994, + 598.2950099999998, + 563.8158299999996 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "oldestAccess": 1793616390562, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 0 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "oldestAccess": null, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 186.68697599999996, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 168.20535599999994, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 3062.672531, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 3345.961422, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2774.038285, + "ttfb": 2597.9061189999998, + "bytes": 799783, + "wallMs": 2798.6827190000004, + "cpuMs": 3619.235 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4565.683196000001, + "requestsPerSecond": 3.504404338438903, + "p50Ms": 274.2541590000001, + "p95Ms": 420.03312000000005, + "maxMs": 420.03312000000005, + "ttfbP95Ms": 134.19271300000037, + "cpuMs": 6282.028, + "cpuMsPerRequest": 392.62675, + "peakRssMiB": 307.33203125, + "eventLoopP95Ms": 18.055167, + "wireBytes": 12796528, + "latenciesMs": [ + 283.06060999999954, + 256.70391199999995, + 420.03312000000005, + 324.0938619999997, + 219.41026800000145, + 229.30496200000016, + 275.88526900000033, + 299.7114730000012, + 266.5954149999998, + 287.5417840000009, + 269.4651840000006, + 268.89352399999916, + 306.058051, + 315.938497000001, + 274.2541590000001, + 264.00922700000046 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4562.068482000001, + "requestsPerSecond": 3.507181021751264, + "p50Ms": 278.4588870000007, + "p95Ms": 389.91570500000125, + "maxMs": 389.91570500000125, + "ttfbP95Ms": 173.92514699999992, + "cpuMs": 6987.798, + "cpuMsPerRequest": 436.737375, + "peakRssMiB": 307.8671875, + "eventLoopP95Ms": 16.457727, + "wireBytes": 12796528, + "latenciesMs": [ + 278.4588870000007, + 281.1261119999999, + 276.71483699999953, + 267.17165399999976, + 303.3640860000014, + 297.20234399999936, + 336.1011980000003, + 237.7239950000003, + 234.67532000000028, + 230.4024759999993, + 268.6959630000001, + 266.40409999999974, + 278.7772109999987, + 314.15745100000095, + 389.91570500000125, + 296.96970800000054 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 3763.949913999999, + "requestsPerSecond": 8.501707177605129, + "p50Ms": 642.3229640000027, + "p95Ms": 1891.1214010000003, + "maxMs": 1897.2233629999992, + "ttfbP95Ms": 916.3905659999982, + "cpuMs": 8793.417, + "cpuMsPerRequest": 274.79428125, + "peakRssMiB": 334.265625, + "eventLoopP95Ms": 33.390591, + "wireBytes": 25593056, + "latenciesMs": [ + 585.0970179999986, + 895.3486280000016, + 1018.2763459999987, + 1355.6836719999992, + 1715.2360610000014, + 1809.3756510000003, + 1891.1214010000003, + 1897.2233629999992, + 1398.7761790000004, + 1167.688602000002, + 1168.4501710000004, + 996.0668119999973, + 693.5390260000022, + 620.7931790000002, + 606.4717660000024, + 613.2474760000005, + 559.0599509999993, + 616.8041739999971, + 554.2963109999982, + 542.1143300000003, + 527.588168000002, + 562.0766370000019, + 589.3005310000008, + 590.287260000001, + 645.2733240000016, + 528.1300869999977, + 516.6620939999993, + 648.4806160000007, + 699.688261000003, + 694.0526509999981, + 591.9850169999991, + 642.3229640000027 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 4464.133246000001, + "requestsPerSecond": 7.168244816319712, + "p50Ms": 943.7150479999982, + "p95Ms": 2383.4711220000027, + "maxMs": 2564.7161730000007, + "ttfbP95Ms": 1069.791956000001, + "cpuMs": 7528.7, + "cpuMsPerRequest": 235.271875, + "peakRssMiB": 344.96875, + "eventLoopP95Ms": 40.992767, + "wireBytes": 25593056, + "latenciesMs": [ + 621.2653050000008, + 1206.6532130000014, + 1423.5453089999974, + 1832.5023220000003, + 2046.5054729999974, + 2209.3857559999997, + 2383.4711220000027, + 2564.7161730000007, + 1969.9509609999986, + 1456.8782020000035, + 1276.2631309999997, + 953.9767490000013, + 829.3892869999981, + 724.7871249999989, + 720.6520100000016, + 846.5432090000031, + 943.7150479999982, + 932.4818950000008, + 973.3836909999991, + 1015.0577439999979, + 1055.6564450000005, + 1095.3947520000002, + 984.5571280000004, + 738.495046, + 721.8328809999985, + 674.4723830000003, + 648.989289000001, + 563.4289619999981, + 477.54974799999763, + 386.9273269999976, + 356.5293180000008, + 312.0217709999997 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 14106.692828999992, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 81, + "b4": 18, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2615.989493, + "ttfb": 2444.515824, + "bytes": 799783, + "wallMs": 2649.8548960000003, + "cpuMs": 3475.536 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 5036.2679530000005, + "requestsPerSecond": 3.1769556642571275, + "p50Ms": 306.2200620000003, + "p95Ms": 466.43938699999944, + "maxMs": 466.43938699999944, + "ttfbP95Ms": 274.94479599999977, + "cpuMs": 8468.332, + "cpuMsPerRequest": 529.27075, + "peakRssMiB": 323.375, + "eventLoopP95Ms": 13.131775, + "wireBytes": 12796528, + "latenciesMs": [ + 358.42220799999996, + 466.43938699999944, + 306.2200620000003, + 309.9064209999997, + 311.4749950000005, + 349.3037430000004, + 281.56235899999956, + 280.5527889999994, + 318.3230679999997, + 283.138336, + 327.2814159999998, + 380.799497, + 253.68926499999907, + 254.79970499999945, + 278.0785589999996, + 270.419946 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4384.659917999999, + "requestsPerSecond": 3.649085744213926, + "p50Ms": 276.08500099999947, + "p95Ms": 304.80936999999903, + "maxMs": 304.80936999999903, + "ttfbP95Ms": 132.10793100000046, + "cpuMs": 7704.723, + "cpuMsPerRequest": 481.5451875, + "peakRssMiB": 322.7109375, + "eventLoopP95Ms": 12.189695, + "wireBytes": 12796528, + "latenciesMs": [ + 281.0129889999989, + 304.80936999999903, + 284.74092700000074, + 276.44833199999994, + 215.5137080000004, + 256.5771300000015, + 277.10722800000076, + 267.7774329999993, + 257.50127500000053, + 276.08500099999947, + 267.72781600000053, + 291.04277, + 265.72084200000063, + 302.3293730000005, + 255.32564499999899, + 301.3845770000007 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2939.360203000002, + "requestsPerSecond": 10.886722888654411, + "p50Ms": 639.1074150000022, + "p95Ms": 1030.1982129999997, + "maxMs": 1051.3689330000016, + "ttfbP95Ms": 609.9967399999987, + "cpuMs": 12314.919, + "cpuMsPerRequest": 384.84121875, + "peakRssMiB": 351.0859375, + "eventLoopP95Ms": 17.334271, + "wireBytes": 25593056, + "latenciesMs": [ + 518.395582000001, + 604.5357820000008, + 679.775843999998, + 796.5316309999998, + 888.3337449999999, + 943.1170270000002, + 1030.1982129999997, + 1051.3689330000016, + 646.761946999999, + 662.7782200000001, + 677.7815439999977, + 646.0964230000027, + 584.1212699999996, + 607.8913309999989, + 614.7159759999995, + 660.6368540000003, + 612.4084040000016, + 629.9008649999996, + 681.9714800000002, + 719.8945139999996, + 743.1802859999989, + 718.0725629999979, + 653.2100189999983, + 610.5960699999996, + 639.1074150000022, + 621.3749190000017, + 566.8207090000033, + 532.8076639999999, + 541.9159569999974, + 579.9428169999992, + 602.0339950000016, + 609.1603009999999 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2880.9861850000016, + "requestsPerSecond": 11.107307687419537, + "p50Ms": 647.521979000001, + "p95Ms": 924.2929980000008, + "maxMs": 948.1463260000019, + "ttfbP95Ms": 597.7670900000012, + "cpuMs": 12401.044, + "cpuMsPerRequest": 387.532625, + "peakRssMiB": 369.05078125, + "eventLoopP95Ms": 13.869055, + "wireBytes": 25593056, + "latenciesMs": [ + 567.3561499999996, + 647.4130580000019, + 727.9359939999995, + 793.8966480000017, + 838.7892260000008, + 889.1527209999986, + 924.2929980000008, + 948.1463260000019, + 600.2440540000025, + 603.9330999999984, + 609.145833999999, + 616.9262229999986, + 646.9959309999977, + 633.166118000001, + 647.521979000001, + 681.3248249999997, + 639.7564839999977, + 701.2402809999985, + 695.448550000001, + 691.5970699999998, + 665.8903140000002, + 664.7029729999995, + 658.9048909999983, + 724.5015729999977, + 710.3877300000022, + 691.4868989999995, + 640.8719779999992, + 637.4657340000012, + 636.6789749999989, + 623.2474309999998, + 602.442549000003, + 524.5295360000018 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 8848.299697000013, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 86, + "b4": 13, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 4133.51807, + "ttfb": 4105.818363, + "bytes": 799783, + "wallMs": 4177.053556999999, + "cpuMs": 4601.785 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 1098.5233150000004, + "requestsPerSecond": 14.565007206970382, + "p50Ms": 62.537617999998474, + "p95Ms": 115.98030499999913, + "maxMs": 115.98030499999913, + "ttfbP95Ms": 99.83405799999855, + "cpuMs": 647.711, + "cpuMsPerRequest": 40.4819375, + "peakRssMiB": 295.0625, + "eventLoopP95Ms": 23.511039, + "wireBytes": 12796528, + "latenciesMs": [ + 56.16949300000033, + 67.81722300000001, + 67.1145549999992, + 100.03485599999931, + 61.43368499999997, + 59.53060499999992, + 64.14640000000054, + 59.725022999999965, + 63.78020900000047, + 59.04901500000051, + 59.96269899999879, + 65.9801179999995, + 115.98030499999913, + 59.89829699999973, + 62.537617999998474, + 69.78213200000027 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 985.0273699999998, + "requestsPerSecond": 16.24320347565571, + "p50Ms": 59.51909599999999, + "p95Ms": 73.28237600000102, + "maxMs": 73.28237600000102, + "ttfbP95Ms": 56.530181000000084, + "cpuMs": 959.036, + "cpuMsPerRequest": 59.93975, + "peakRssMiB": 298.671875, + "eventLoopP95Ms": 22.740991, + "wireBytes": 12796528, + "latenciesMs": [ + 52.752048000000286, + 59.51909599999999, + 58.946334999998726, + 61.1172579999984, + 58.38249699999869, + 65.23478799999975, + 73.28237600000102, + 65.02546900000016, + 59.076521999999386, + 56.99174700000003, + 60.18791600000077, + 71.3982560000004, + 58.60535300000083, + 61.07317800000055, + 58.85956000000078, + 60.49789199999941 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1954.3340380000009, + "requestsPerSecond": 16.373864128543612, + "p50Ms": 478.30868799999917, + "p95Ms": 632.6496230000012, + "maxMs": 677.5356080000001, + "ttfbP95Ms": 343.6619989999999, + "cpuMs": 1877.199, + "cpuMsPerRequest": 58.66246875, + "peakRssMiB": 296.6875, + "eventLoopP95Ms": 53.739519, + "wireBytes": 25593056, + "latenciesMs": [ + 390.96803700000055, + 392.5178029999988, + 421.6792400000013, + 454.94918099999995, + 511.57485899999847, + 561.0471089999992, + 632.6496230000012, + 677.5356080000001, + 528.2149260000006, + 527.6841850000001, + 520.9727640000001, + 515.9338190000017, + 515.6554150000011, + 498.23469999999907, + 477.2951540000013, + 481.4859120000001, + 478.30868799999917, + 478.8022369999999, + 478.1551070000005, + 487.4698879999996, + 480.3990050000011, + 484.40064600000005, + 482.0873109999993, + 471.6002520000002, + 460.01162600000134, + 459.3364039999997, + 463.01108999999997, + 437.91399699999965, + 400.7985580000004, + 386.94794100000036, + 348.44693799999914, + 318.4566020000002 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1928.3079290000005, + "requestsPerSecond": 16.59485993847199, + "p50Ms": 460.02702899999895, + "p95Ms": 517.5844370000013, + "maxMs": 518.0784760000006, + "ttfbP95Ms": 365.4734669999998, + "cpuMs": 1684.159, + "cpuMsPerRequest": 52.62996875, + "peakRssMiB": 296.61328125, + "eventLoopP95Ms": 115.015679, + "wireBytes": 25593056, + "latenciesMs": [ + 390.607113, + 391.3720570000005, + 392.2259959999992, + 393.1865710000002, + 394.0358929999984, + 394.89413500000046, + 395.72629100000086, + 450.7987559999983, + 505.34500300000036, + 505.8497609999995, + 505.80685300000005, + 505.5900709999987, + 505.4325750000007, + 505.3257849999991, + 505.4023479999996, + 516.7643150000004, + 459.9411569999993, + 459.80340700000124, + 459.8679229999998, + 459.9083069999997, + 460.02702899999895, + 459.9273200000007, + 460.01698899999974, + 452.633366, + 518.0784760000006, + 517.5844370000013, + 517.0031449999988, + 516.5464030000003, + 515.9739840000002, + 515.7900609999997, + 515.1902529999988, + 505.2450489999992 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "oldestAccess": 1793616451382, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "oldestAccess": 1793616454879, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 375.53081100000054, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 236.3021260000005, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2693.681316, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 3065.313115, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "identity", + "binary": false, + "cold": { + "ms": 847.68426, + "ttfb": 833.8569710000002, + "bytes": 264491, + "wallMs": 853.0616030000001, + "cpuMs": 560.663 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 938.6548359999997, + "requestsPerSecond": 17.045669383841542, + "p50Ms": 55.97203100000024, + "p95Ms": 73.99945200000002, + "maxMs": 73.99945200000002, + "ttfbP95Ms": 60.856898, + "cpuMs": 538.006, + "cpuMsPerRequest": 33.625375, + "peakRssMiB": 166.33203125, + "eventLoopP95Ms": 23.887871, + "wireBytes": 4231856, + "latenciesMs": [ + 55.544676999999865, + 63.483901000000515, + 45.86671800000022, + 54.42621000000054, + 66.48794099999941, + 73.99945200000002, + 55.913031999999475, + 54.901794999999765, + 57.97167900000022, + 54.48050600000079, + 59.02478299999984, + 54.33507000000009, + 55.97203100000024, + 58.207222, + 63.32894599999963, + 59.93752399999994 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 885.867037, + "requestsPerSecond": 18.06140123938261, + "p50Ms": 51.56672600000002, + "p95Ms": 76.41103800000019, + "maxMs": 76.41103800000019, + "ttfbP95Ms": 55.08843699999943, + "cpuMs": 495.814, + "cpuMsPerRequest": 30.988375, + "peakRssMiB": 182.5703125, + "eventLoopP95Ms": 23.871487, + "wireBytes": 4231856, + "latenciesMs": [ + 51.56672600000002, + 76.41103800000019, + 56.72054200000002, + 48.85230500000034, + 54.77613099999962, + 70.69718599999942, + 48.52773900000011, + 58.13392400000066, + 53.54081200000019, + 70.6205059999993, + 45.36269100000027, + 57.18611500000043, + 43.21563699999933, + 50.51249100000041, + 49.052576000000045, + 46.778933999999936 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1726.9123990000007, + "requestsPerSecond": 18.5301813910944, + "p50Ms": 430.2895209999997, + "p95Ms": 521.4703719999998, + "maxMs": 570.4238839999998, + "ttfbP95Ms": 355.71187999999984, + "cpuMs": 1085.553, + "cpuMsPerRequest": 33.92353125, + "peakRssMiB": 206.80859375, + "eventLoopP95Ms": 51.085311, + "wireBytes": 8463712, + "latenciesMs": [ + 326.3152849999997, + 339.7492339999999, + 361.17769300000054, + 396.918858, + 433.10739099999955, + 476.63700699999936, + 521.4703719999998, + 570.4238839999998, + 435.813255, + 434.79417999999987, + 432.3305899999996, + 432.64649200000076, + 432.40692599999966, + 430.2895209999997, + 426.8219990000007, + 424.17936499999996, + 426.42177100000026, + 426.62182499999926, + 426.12418199999956, + 421.9816929999997, + 428.46332099999927, + 437.76221799999985, + 454.4767589999992, + 457.8489180000006, + 461.316092, + 462.06927799999994, + 454.5653940000002, + 433.4097979999997, + 400.6650490000002, + 359.45008699999926, + 310.9484190000003, + 269.96401400000013 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1893.9079319999992, + "requestsPerSecond": 16.89628067939261, + "p50Ms": 447.9941629999994, + "p95Ms": 595.5397090000006, + "maxMs": 596.072807999999, + "ttfbP95Ms": 445.2943489999998, + "cpuMs": 1329.012, + "cpuMsPerRequest": 41.531625, + "peakRssMiB": 209.7734375, + "eventLoopP95Ms": 130.875391, + "wireBytes": 8463712, + "latenciesMs": [ + 388.93809500000043, + 389.9219489999996, + 390.62640400000055, + 391.32796600000074, + 392.0606739999994, + 392.740366, + 393.57584700000007, + 447.9941629999994, + 509.5175489999983, + 508.8547039999994, + 592.6407660000004, + 595.5397090000006, + 593.2299610000009, + 593.1457739999987, + 596.072807999999, + 540.7829920000004, + 486.5718679999991, + 486.4500100000005, + 562.2128560000001, + 562.428774, + 562.0080940000007, + 561.5576099999998, + 561.0725689999999, + 560.4633880000001, + 439.73965099999987, + 439.1429329999992, + 304.95830399999977, + 304.45285499999954, + 304.21140099999866, + 304.0565779999997, + 303.9413690000001, + 342.683798 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "oldestAccess": 1793616464897, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "oldestAccess": 1793616465341, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 62.453798000000006, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 100, + "bytes": 26446753, + "ms": 13851.615129999996, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 37, + "b4": 63, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 12.358991999999944, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 190.44990600000028, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 264491, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "identity", + "binary": false, + "cold": { + "ms": 4240.267206, + "ttfb": 4145.759511, + "bytes": 2115777, + "wallMs": 4251.708791999999, + "cpuMs": 5035.175 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 2231.356296000001, + "requestsPerSecond": 7.170526745855021, + "p50Ms": 130.5677420000011, + "p95Ms": 176.00814399999945, + "maxMs": 176.00814399999945, + "ttfbP95Ms": 88.37793199999942, + "cpuMs": 3476.684, + "cpuMsPerRequest": 217.29275, + "peakRssMiB": 310.72265625, + "eventLoopP95Ms": 21.905407, + "wireBytes": 33852432, + "latenciesMs": [ + 128.49011500000051, + 113.7801789999994, + 155.8555550000001, + 118.1585869999999, + 161.0120539999989, + 138.8835280000003, + 150.15874900000017, + 124.10614700000042, + 127.72065699999985, + 160.09266799999932, + 152.5031340000005, + 176.00814399999945, + 165.35211999999956, + 97.89141100000052, + 130.5677420000011, + 124.4235379999991 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 2246.2807080000002, + "requestsPerSecond": 7.122885373594189, + "p50Ms": 126.04760300000089, + "p95Ms": 261.0463170000003, + "maxMs": 261.0463170000003, + "ttfbP95Ms": 194.95034000000123, + "cpuMs": 3670.129, + "cpuMsPerRequest": 229.3830625, + "peakRssMiB": 309.8046875, + "eventLoopP95Ms": 26.705919, + "wireBytes": 33852432, + "latenciesMs": [ + 128.9333119999992, + 122.7720070000014, + 121.05488100000002, + 117.38205500000004, + 261.0463170000003, + 126.04760300000089, + 98.23796000000038, + 177.01260100000036, + 177.4094010000008, + 139.46454900000026, + 163.95187199999964, + 144.7291150000001, + 111.81921900000088, + 118.32826999999997, + 128.02469500000007, + 104.90130899999895 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 3610.293276999999, + "requestsPerSecond": 8.863545852039657, + "p50Ms": 880.8065259999985, + "p95Ms": 1045.4587119999997, + "maxMs": 1092.9498270000004, + "ttfbP95Ms": 337.26380699999936, + "cpuMs": 5352.973, + "cpuMsPerRequest": 167.28040625, + "peakRssMiB": 311.42578125, + "eventLoopP95Ms": 39.092223, + "wireBytes": 67704864, + "latenciesMs": [ + 854.7126389999994, + 873.5414430000001, + 890.9284610000013, + 922.8263139999999, + 952.1137870000002, + 989.2693469999995, + 1045.4587119999997, + 1092.9498270000004, + 827.2293980000013, + 822.5472090000003, + 831.7749289999992, + 836.574829000001, + 844.5174879999995, + 848.914757999999, + 842.8402960000003, + 833.3174620000009, + 877.6528830000007, + 880.8065259999985, + 873.8623820000012, + 884.142120999999, + 891.0706649999993, + 897.9656350000005, + 894.636289, + 896.8272919999999, + 959.0281510000004, + 966.3807809999998, + 954.7249360000005, + 917.2453580000001, + 884.2882710000013, + 802.3924480000005, + 866.041455999999, + 778.7517040000002 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 3221.3455169999997, + "requestsPerSecond": 9.933737263241856, + "p50Ms": 799.9613860000027, + "p95Ms": 855.833677999999, + "maxMs": 856.6374830000022, + "ttfbP95Ms": 313.0207130000017, + "cpuMs": 4646.469, + "cpuMsPerRequest": 145.20215625, + "peakRssMiB": 281.73828125, + "eventLoopP95Ms": 50.757631, + "wireBytes": 67704864, + "latenciesMs": [ + 691.8691729999991, + 723.5529839999999, + 723.5534890000017, + 724.5756029999993, + 725.4801609999995, + 770.5103470000013, + 771.304282000001, + 772.1541000000016, + 799.9613860000027, + 778.0645320000003, + 778.3426239999972, + 778.4286580000007, + 781.9869319999998, + 771.7980169999973, + 771.9096559999998, + 772.0715640000017, + 843.5909690000008, + 844.4422290000002, + 846.5245719999984, + 846.1335359999975, + 849.9244069999986, + 854.2954329999993, + 856.6374830000022, + 855.833677999999, + 824.628085999997, + 825.6792700000005, + 823.8508430000002, + 827.848624000002, + 825.8247240000019, + 819.9240890000001, + 819.4293999999973, + 819.0379329999996 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "oldestAccess": 1793616474908, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "oldestAccess": 1793616478461, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 3, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 340.3119409999995, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 98, + "bytes": 207327521, + "ms": 43162.62504299999, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 30, + "b4": 68, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2913.9641959999994, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 3198.1706090000002, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 2115777, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": true, + "cold": { + "ms": 170.32001999999966, + "ttfb": 131.06223999999975, + "bytes": 262244, + "wallMs": 176.19916299999977, + "cpuMs": 402.035 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 517.2038039999998, + "requestsPerSecond": 30.935580667152262, + "p50Ms": 29.39597999999978, + "p95Ms": 39.142167999999856, + "maxMs": 39.142167999999856, + "ttfbP95Ms": 9.69939499999964, + "cpuMs": 768.091, + "cpuMsPerRequest": 48.0056875, + "peakRssMiB": 163.54296875, + "eventLoopP95Ms": 11.116543, + "wireBytes": 4195904, + "latenciesMs": [ + 37.46068800000012, + 36.55674399999998, + 39.142167999999856, + 38.91417499999989, + 36.43857399999979, + 30.30164599999989, + 28.943894, + 28.025067000000035, + 28.977859999999964, + 28.22457600000007, + 28.159047999999984, + 28.724547999999686, + 28.77209700000003, + 29.39597999999978, + 31.735525000000052, + 32.5152579999999 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 485.2944130000001, + "requestsPerSecond": 32.96967690415178, + "p50Ms": 29.315813000000162, + "p95Ms": 33.34162699999979, + "maxMs": 33.34162699999979, + "ttfbP95Ms": 5.16385900000023, + "cpuMs": 698.488, + "cpuMsPerRequest": 43.6555, + "peakRssMiB": 180.81640625, + "eventLoopP95Ms": 11.329535, + "wireBytes": 4195904, + "latenciesMs": [ + 32.83607800000027, + 32.19794700000011, + 30.905816999999843, + 30.449981000000207, + 30.00793900000008, + 28.641755000000103, + 26.292233000000124, + 27.917050000000017, + 29.090839999999844, + 28.986617000000024, + 28.978868000000148, + 29.071312999999463, + 32.59869600000002, + 29.315813000000162, + 30.71487100000013, + 33.34162699999979 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 355.6662189999997, + "requestsPerSecond": 89.9719970312953, + "p50Ms": 92.13386399999945, + "p95Ms": 111.28506500000003, + "maxMs": 112.80149600000004, + "ttfbP95Ms": 34.86628400000063, + "cpuMs": 1249.591, + "cpuMsPerRequest": 39.04971875, + "peakRssMiB": 206.68359375, + "eventLoopP95Ms": 12.591103, + "wireBytes": 8391808, + "latenciesMs": [ + 86.64660300000014, + 94.27317400000084, + 94.63870299999962, + 98.02339799999936, + 103.12502600000062, + 110.61554200000046, + 111.28506500000003, + 112.80149600000004, + 92.55129600000055, + 89.97783600000002, + 90.36360299999978, + 92.13386399999945, + 97.85559399999966, + 90.70342299999993, + 90.50421000000006, + 95.48344699999961, + 85.46388900000056, + 98.32922600000074, + 100.38465700000052, + 99.34843300000011, + 92.85589999999956, + 92.58622299999934, + 92.54420500000015, + 91.5417379999999, + 75.31795299999976, + 60.604715999999826, + 62.83678899999995, + 58.74855100000059, + 56.98819899999944, + 58.28098600000067, + 57.28162599999996, + 52.535947999999735 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 240.38187600000037, + "requestsPerSecond": 133.12151703150843, + "p50Ms": 58.698615999999674, + "p95Ms": 68.41135200000008, + "maxMs": 71.3955420000002, + "ttfbP95Ms": 15.646375999999691, + "cpuMs": 1105.851, + "cpuMsPerRequest": 34.55784375, + "peakRssMiB": 208.640625, + "eventLoopP95Ms": 16.408575, + "wireBytes": 8391808, + "latenciesMs": [ + 60.07503900000029, + 63.03193900000042, + 65.1338679999999, + 66.08322399999997, + 66.4172580000004, + 67.71732500000053, + 68.07509500000015, + 71.3955420000002, + 66.00560299999961, + 65.24226399999952, + 65.35982999999942, + 65.34114000000045, + 67.50921699999981, + 66.21713199999976, + 68.41135200000008, + 67.51799800000026, + 54.50553299999956, + 58.44198899999992, + 55.63447499999984, + 56.76060799999959, + 55.250474000000395, + 53.11564300000009, + 58.698615999999674, + 57.195668000000296, + 49.950450000000274, + 49.61188500000026, + 50.24023699999998, + 50.94201599999997, + 48.35015300000032, + 49.032532000000174, + 46.66071499999998, + 43.05025000000023 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_binary", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 0, + "b0": 100, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 262244, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": true, + "cold": { + "ms": 598.9634350000001, + "ttfb": 588.9748979999999, + "bytes": 262144, + "wallMs": 605.8834300000003, + "cpuMs": 237.723 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 844.545318, + "requestsPerSecond": 18.9451053235251, + "p50Ms": 49.0220249999993, + "p95Ms": 141.09141699999964, + "maxMs": 141.09141699999964, + "ttfbP95Ms": 134.85506199999963, + "cpuMs": 306.972, + "cpuMsPerRequest": 19.18575, + "peakRssMiB": 150.93359375, + "eventLoopP95Ms": 23.183359, + "wireBytes": 4194304, + "latenciesMs": [ + 141.09141699999964, + 53.14151699999957, + 54.77165299999979, + 51.98720599999979, + 50.543478999999934, + 49.0220249999993, + 51.08096399999977, + 49.19204500000069, + 50.44716900000003, + 47.512259999999515, + 39.50681200000054, + 39.75322299999971, + 39.101698999999826, + 39.66549099999975, + 41.243421999999555, + 41.74792200000047 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 842.117158, + "requestsPerSecond": 18.99973162641581, + "p50Ms": 50.5151249999999, + "p95Ms": 74.68197400000008, + "maxMs": 74.68197400000008, + "ttfbP95Ms": 68.0824990000001, + "cpuMs": 365.919, + "cpuMsPerRequest": 22.8699375, + "peakRssMiB": 166.40234375, + "eventLoopP95Ms": 24.395775, + "wireBytes": 4194304, + "latenciesMs": [ + 38.87878999999975, + 49.12782399999924, + 55.982866000000286, + 57.38786400000026, + 74.68197400000008, + 54.27242000000024, + 51.510269999999764, + 51.949359000000186, + 50.3580409999995, + 55.410007999999834, + 47.9133410000004, + 53.837187000000085, + 50.5151249999999, + 49.6673980000005, + 47.12981300000047, + 48.29386000000068 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1621.614431, + "requestsPerSecond": 19.733420835596892, + "p50Ms": 381.8650580000003, + "p95Ms": 555.8119690000003, + "maxMs": 606.3601979999994, + "ttfbP95Ms": 429.7561230000001, + "cpuMs": 604.218, + "cpuMsPerRequest": 18.8818125, + "peakRssMiB": 196.82421875, + "eventLoopP95Ms": 56.393727, + "wireBytes": 8388608, + "latenciesMs": [ + 295.17150500000025, + 359.4349089999996, + 398.9586160000008, + 430.89436600000045, + 472.5974409999999, + 519.7597610000003, + 555.8119690000003, + 606.3601979999994, + 364.5856680000006, + 379.4638160000004, + 370.58040900000015, + 375.1117830000003, + 384.66923700000007, + 380.4005299999999, + 381.8650580000003, + 376.32448899999963, + 372.4201350000003, + 391.9840029999996, + 395.53422799999953, + 390.02938300000005, + 386.69493499999953, + 389.62726499999917, + 391.26285000000007, + 403.9490970000006, + 422.0761220000004, + 396.97904000000017, + 376.7110329999996, + 367.9533189999993, + 338.9048790000006, + 304.3846940000003, + 276.998294, + 228.19124399999964 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1630.0928800000002, + "requestsPerSecond": 19.630783247148468, + "p50Ms": 360.09912299999996, + "p95Ms": 530.6982509999998, + "maxMs": 530.7177570000003, + "ttfbP95Ms": 508.2723479999995, + "cpuMs": 923.192, + "cpuMsPerRequest": 28.84975, + "peakRssMiB": 209.1640625, + "eventLoopP95Ms": 172.621823, + "wireBytes": 8388608, + "latenciesMs": [ + 273.9545340000004, + 276.4535679999999, + 278.93686400000024, + 281.56293800000003, + 284.0881079999999, + 286.74519899999996, + 289.22213100000045, + 294.9487589999999, + 530.7177570000003, + 530.6982509999998, + 529.9272559999999, + 528.9417779999994, + 528.0503559999997, + 524.6448369999998, + 529.766877, + 525.6965410000003, + 449.6584759999996, + 450.51184099999955, + 451.9970979999998, + 453.2242379999998, + 454.48194499999954, + 454.6217450000004, + 454.30000199999904, + 456.56114400000024, + 360.09912299999996, + 358.4874949999994, + 356.935614, + 355.4511390000007, + 353.9853579999999, + 353.5865329999997, + 352.92556799999875, + 350.4371740000006 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 262144, + "allocatedBytes": 262144, + "oldestAccess": 1793616499020, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 8, + "decisions": 0 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "oldestAccess": null, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 35.68100200000026, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_binary", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 262144, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + } + ], + "completedAt": "2026-11-02T10:48:24.664Z", + "assertions": "All 2200 response bodies verified against expected output or the validated wire digest" +} diff --git a/docs/cache-performance-summary.json b/docs/cache-performance-summary.json new file mode 100644 index 0000000..fc1f13c --- /dev/null +++ b/docs/cache-performance-summary.json @@ -0,0 +1,301 @@ +{ + "measuredAt": "2026-11-02T10:48:24.664Z", + "runtime": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 2.19, + 3.52, + 3.52 + ] + }, + "scope": "Compiled local loopback HTTP; changed text; 32 serial and 64 concurrency-8 warm samples per scenario. Percentiles pooled across two batches. CPU/RSS include client and server. Experimental NORMAL affects disposable benchmark databases only.", + "verifiedHttpResponses": 2700, + "rows": [ + { + "sizeBytes": 16384, + "label": "16 KiB", + "baseline": "raw source cache", + "baselineMetrics": { + "coldMs": 145.9149209999996, + "serial": { + "p50Ms": 8.318075000000135, + "p95Ms": 10.736985999999888, + "requestsPerSecond": 117.44442918645578, + "cpuMsPerRequest": 11.06740625, + "peakRssMiB": 146.50390625 + }, + "concurrent8": { + "p50Ms": 50.20099499999969, + "p95Ms": 71.84271200000012, + "requestsPerSecond": 142.73942902734086, + "cpuMsPerRequest": 9.620406249999998, + "peakRssMiB": 170.53125 + } + }, + "currentMetrics": { + "coldMs": 709.8329450000001, + "serial": { + "p50Ms": 44.88915300000008, + "p95Ms": 68.10151200000018, + "requestsPerSecond": 20.710932531095363, + "cpuMsPerRequest": 13.53253125, + "peakRssMiB": 147.47265625 + }, + "concurrent8": { + "p50Ms": 362.3927130000002, + "p95Ms": 462.1094459999995, + "requestsPerSecond": 20.755357071571403, + "cpuMsPerRequest": 11.042078125, + "peakRssMiB": 154.1328125 + } + }, + "experimentalNormalMetrics": { + "coldMs": 211.99763500000017, + "serial": { + "p50Ms": 6.900600000000395, + "p95Ms": 9.86466399999972, + "requestsPerSecond": 134.73985687410286, + "cpuMsPerRequest": 8.7118125, + "peakRssMiB": 141.24609375 + }, + "concurrent8": { + "p50Ms": 38.635037999999895, + "p95Ms": 46.82847199999969, + "requestsPerSecond": 197.41218048206238, + "cpuMsPerRequest": 6.15025, + "peakRssMiB": 147.6875 + } + }, + "gzipSavingPercent": 61.97907215871288 + }, + { + "sizeBytes": 262144, + "label": "256 KiB", + "baseline": "raw source cache", + "baselineMetrics": { + "coldMs": 100.41967600000021, + "serial": { + "p50Ms": 36.49021599999992, + "p95Ms": 53.95963900000015, + "requestsPerSecond": 26.236596142201567, + "cpuMsPerRequest": 42.746187500000005, + "peakRssMiB": 215.1875 + }, + "concurrent8": { + "p50Ms": 120.57758600000034, + "p95Ms": 250.78685799999994, + "requestsPerSecond": 53.7503475211922, + "cpuMsPerRequest": 37.485390625, + "peakRssMiB": 268.109375 + } + }, + "currentMetrics": { + "coldMs": 726.5002400000001, + "serial": { + "p50Ms": 45.89932399999998, + "p95Ms": 73.79595599999993, + "requestsPerSecond": 20.372770202529612, + "cpuMsPerRequest": 16.253875, + "peakRssMiB": 160.78515625 + }, + "concurrent8": { + "p50Ms": 326.38565800000015, + "p95Ms": 444.0948499999995, + "requestsPerSecond": 23.057422718927143, + "cpuMsPerRequest": 12.072328124999999, + "peakRssMiB": 185.7578125 + } + }, + "experimentalNormalMetrics": { + "coldMs": 293.5069330000001, + "serial": { + "p50Ms": 11.702889000000141, + "p95Ms": 16.41937599999983, + "requestsPerSecond": 80.13277379588973, + "cpuMsPerRequest": 14.18359375, + "peakRssMiB": 160.62890625 + }, + "concurrent8": { + "p50Ms": 72.28398599999946, + "p95Ms": 89.62643300000036, + "requestsPerSecond": 105.43423551997391, + "cpuMsPerRequest": 11.027765625, + "peakRssMiB": 185.6328125 + } + }, + "gzipSavingPercent": 61.890196641851716 + }, + { + "sizeBytes": 2097152, + "label": "2 MiB", + "baseline": "existing transformed cache", + "baselineMetrics": { + "coldMs": 2903.1252619999996, + "serial": { + "p50Ms": 236.22282199999972, + "p95Ms": 288.4866490000004, + "requestsPerSecond": 4.133831174669408, + "cpuMsPerRequest": 362.9403125, + "peakRssMiB": 336.703125 + }, + "concurrent8": { + "p50Ms": 690.5366940000022, + "p95Ms": 929.2231830000001, + "requestsPerSecond": 10.958910900736049, + "cpuMsPerRequest": 253.19115625, + "peakRssMiB": 308.02734375 + } + }, + "currentMetrics": { + "coldMs": 4133.51807, + "serial": { + "p50Ms": 60.49789199999941, + "p95Ms": 100.03485599999931, + "requestsPerSecond": 15.358397676800456, + "cpuMsPerRequest": 50.210843749999995, + "peakRssMiB": 298.671875 + }, + "concurrent8": { + "p50Ms": 478.30868799999917, + "p95Ms": 528.2149260000006, + "requestsPerSecond": 16.483621344424616, + "cpuMsPerRequest": 55.64621875, + "peakRssMiB": 296.6875 + } + }, + "experimentalNormalMetrics": { + "coldMs": 3895.830503, + "serial": { + "p50Ms": 25.95565600000009, + "p95Ms": 32.11927700000069, + "requestsPerSecond": 40.429950182644916, + "cpuMsPerRequest": 43.713375, + "peakRssMiB": 307.65625 + }, + "concurrent8": { + "p50Ms": 161.56209900000067, + "p95Ms": 324.75534399999924, + "requestsPerSecond": 43.95237969807028, + "cpuMsPerRequest": 39.839515625000004, + "peakRssMiB": 307.93359375 + } + }, + "gzipSavingPercent": 62.199088089151175 + } + ], + "indexProbe": { + "measuredAt": "2026-11-02T10:42:36.314Z", + "scope": "Synthetic metadata-only scale probe. Dummy blob rows have no payload files; excludes directory scanning and disk reads for those rows. Real reads use one verified blob. Eviction probe uses real 64 KiB files.", + "node": "v24.14.1", + "cardinality": [ + { + "seedBlobs": 0, + "seedAliases": 0, + "seedDecisions": 0, + "seedHistory": 0, + "adminStats": { + "p50Ms": 0.5495260000002418, + "p95Ms": 0.8194220000000314, + "maxMs": 0.8764419999997699 + }, + "warmSourceHit": { + "p50Ms": 22.106009000000086, + "p95Ms": 32.67359299999998, + "maxMs": 38.92065599999978 + }, + "decisionWrite": { + "p50Ms": 6.600801999999931, + "p95Ms": 12.472383000000264, + "maxMs": 15.8033989999999 + }, + "smallFill": { + "p50Ms": 71.12627699999939, + "p95Ms": 98.24754799999982, + "maxMs": 100.35789100000011 + } + }, + { + "seedBlobs": 10000, + "seedAliases": 20000, + "seedDecisions": 10000, + "seedHistory": 10000, + "adminStats": { + "p50Ms": 6.904306000000361, + "p95Ms": 9.677666999999929, + "maxMs": 12.638716999999815 + }, + "warmSourceHit": { + "p50Ms": 22.83701199999996, + "p95Ms": 47.79449499999828, + "maxMs": 102.36107600000014 + }, + "decisionWrite": { + "p50Ms": 8.062501999999768, + "p95Ms": 13.995523999999932, + "maxMs": 14.909832000001188 + }, + "smallFill": { + "p50Ms": 75.03789299999971, + "p95Ms": 117.16210499999943, + "maxMs": 143.80038499999955 + } + }, + { + "seedBlobs": 100000, + "seedAliases": 200000, + "seedDecisions": 100000, + "seedHistory": 100000, + "adminStats": { + "p50Ms": 66.83604900000137, + "p95Ms": 78.69937500000015, + "maxMs": 87.98320400000011 + }, + "warmSourceHit": { + "p50Ms": 26.310491000000184, + "p95Ms": 82.98941600000035, + "maxMs": 112.1549300000006 + }, + "decisionWrite": { + "p50Ms": 22.948387000000366, + "p95Ms": 45.47333599999911, + "maxMs": 56.50094800000079 + }, + "smallFill": { + "p50Ms": 136.3280279999999, + "p95Ms": 214.8330500000011, + "maxMs": 312.4176129999978 + } + } + ], + "eviction": { + "requests": 300, + "distinctObjects": 100, + "upstreamFills": 300, + "hitRate": 0, + "elapsedMs": 24658.882357999995, + "p50Ms": 74.17433299999539, + "p95Ms": 107.83662400000321, + "peakAllocated": 3997696, + "final": { + "blobs": 60, + "originalBytes": 3932160, + "storedBytes": 3932160, + "allocatedBytes": 3932160, + "oldestAccess": 1793616151486, + "budgetBytes": 4194304, + "reservedBytes": 0, + "maxObjectBytes": 65536, + "activeReaders": 0, + "decisions": 0 + } + }, + "assertions": "passed" + }, + "recommendation": "Keep production disabled pending reduction of synchronous metadata commits and retesting. No application settings changed." +} diff --git a/docs/cache-workload-results.json b/docs/cache-workload-results.json new file mode 100644 index 0000000..60fd2a8 --- /dev/null +++ b/docs/cache-workload-results.json @@ -0,0 +1,455 @@ +{ + "node": "v24.14.1", + "measuredAt": "2026-11-02T10:19:09.724Z", + "scope": "Synthetic local acceptance workload; not a production projection", + "sourceRequests": 5, + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 19200, + "storedBytes": 139, + "allocatedBytes": 4096, + "oldestAccess": 1793614746536, + "budgetBytes": 1048576, + "reservedBytes": 0, + "maxObjectBytes": 32768, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 19600, + "storedBytes": 140, + "allocatedBytes": 4096, + "oldestAccess": 1793614747125, + "budgetBytes": 1048576, + "reservedBytes": 0, + "maxObjectBytes": 32768, + "activeReaders": 0, + "decisions": 3 + }, + "eviction": { + "blobs": 13, + "originalBytes": 52000, + "storedBytes": 52000, + "allocatedBytes": 53248, + "oldestAccess": 1793614748735, + "budgetBytes": 65536, + "reservedBytes": 0, + "maxObjectBytes": 4096, + "activeReaders": 0, + "decisions": 0 + }, + "decisionsReused": 2, + "unchangedDecisionsComputed": 2, + "changedOutputsComputed": 1, + "compressionSavingPercent": 99.27604166666667, + "responses": [ + { + "status": 200, + "encoding": "gzip", + "bytes": 139 + }, + { + "status": 200, + "encoding": "gzip", + "bytes": 139 + }, + { + "status": 200, + "encoding": "gzip", + "bytes": 139 + }, + { + "status": 200, + "encoding": "gzip", + "bytes": 140 + }, + { + "status": 200, + "encoding": "gzip", + "bytes": 140 + } + ], + "metrics": [ + { + "name": "compress", + "traffic": "file", + "count": 2, + "bytes": 38800, + "ms": 11.220815999999104, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "file", + "count": 2, + "bytes": 38400, + "ms": 0, + "b0": 2, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "file", + "count": 3, + "bytes": 57600, + "ms": 0, + "b0": 3, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "file", + "count": 3, + "bytes": 57600, + "ms": 11.292176999999356, + "b0": 0, + "b1": 0, + "b2": 3, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 7.701614000000518, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "file", + "count": 2, + "bytes": 38400, + "ms": 8.860568000000058, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "file", + "count": 1, + "bytes": 19600, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "file", + "count": 3, + "bytes": 0, + "ms": 0, + "b0": 3, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "file", + "count": 3, + "bytes": 57600, + "ms": 0, + "b0": 3, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "file", + "count": 1, + "bytes": 140, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 49.649725999999646, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "file", + "count": 2, + "bytes": 38400, + "ms": 139.08289400000012, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "file", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "file", + "count": 4, + "bytes": 76800, + "ms": 0, + "b0": 4, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "file", + "count": 4, + "bytes": 76800, + "ms": 0, + "b0": 4, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "file", + "count": 4, + "bytes": 76800, + "ms": 0, + "b0": 4, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "file", + "count": 4, + "bytes": 76800, + "ms": 0, + "b0": 4, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "file", + "count": 1, + "bytes": 139, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "workload_eviction", + "traffic": "background", + "count": 17, + "bytes": 68000, + "ms": 16365, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 17, + "b5": 0, + "b6": 0 + }, + { + "name": "workload_fill", + "traffic": "background", + "count": 30, + "bytes": 120000, + "ms": 0, + "b0": 30, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "workload_first_seen_miss", + "traffic": "background", + "count": 30, + "bytes": 0, + "ms": 0, + "b0": 30, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "workload_miss", + "traffic": "background", + "count": 30, + "bytes": 0, + "ms": 0, + "b0": 30, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "workload_stored", + "traffic": "background", + "count": 30, + "bytes": 120000, + "ms": 0, + "b0": 30, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "assertions": "passed" +} diff --git a/docs/performance-monitoring.md b/docs/performance-monitoring.md index 625dbfc..485558f 100644 --- a/docs/performance-monitoring.md +++ b/docs/performance-monitoring.md @@ -125,3 +125,284 @@ an unavailable file as a successful cache fill. Persistent 404s still require checking the repository's source snapshot. Application rate limits remain in force; 429 replies now include `rate_limited`, `resetAt`, and `Retry-After` so clients can wait for the actual store reset. + +## Shared blob cache + +The optional shared filesystem cache stores immutable source content across projects. +It uses Node's built-in SQLite module and requires Node 22.15 or newer. All API and +streamer processes on one host must mount the same local cache directory. SQLite +WAL is not a distributed lock service: do not put this directory on NFS or share +it across hosts. S3 storage continues to use the existing storage implementation. + +Enable the integrated implementation with `SHARED_CACHE_ENABLED=true`. The default +is false so a code deployment does not silently migrate production data. The other +settings are independent rollback controls: + +- `SHARED_CACHE_PATH`: defaults to `.shared-cache-v1` inside `FOLDER`. +- `SHARED_CACHE_BYTES`: source pool budget, default 10 GiB. +- `SHARED_CACHE_RESULT_BYTES`: transformed output budget, default 512 MiB. +- `SHARED_CACHE_MAX_FILE_BYTES`: maximum source admission size, default 32 MiB. +- `SHARED_CACHE_FREE_BYTES`: free-device-space reserve, default 1 GiB. +- `SHARED_CACHE_LOW_WATER`: eviction target fraction, default 0.9. +- `SHARED_CACHE_GZIP`: store gzip when beneficial, default true. +- `SHARED_CACHE_GZIP_MIN_SAVING`: minimum fractional saving, default 0.10. +- `SHARED_CACHE_DECISIONS`: enable unchanged decisions and changed-output reuse, + default true. +- `CACHE_MONITORING_ENABLED`: collect cache observations, default true. Monitoring + is independent of shared storage and also records legacy cache/inspection events. + +These are initial limits, not capacity recommendations from the production sample. +Restart processes together when changing pool limits. Reserve headroom for SQLite, +filesystem directories, existing caches and other application temporary files. +The budget accounts for blob allocation with a conservative 4 KiB minimum plus +in-flight reservations of three times the maximum object size and a small overhead. +Keep each pool budget larger than this reservation. Admission can bypass the cache +while other fills/readers occupy the budget. Oversized source objects are streamed +without admission, still subject to the application's file-size limit. + +Git blobs are verified against the requested Git SHA before publication. Resolved +LFS content is admitted only after verifying both the Git pointer and its SHA-256 +payload digest and size. Gzip is a representation of the same uncompressed content. +Files are written privately, synced and atomically renamed before index publication. +Fills and readers have renewable leases. Eviction skips readers, and stale fills +are recovered before their reservations are released. LRU access timestamps are +coarsened to 30 seconds. Orphan reconciliation runs at most hourly across processes. +Alias and reuse-history indexes are bounded; decisions expire after seven days and +are capped at 100,000 entries. + +Existing generation caches are read as a migration fallback and verified before +promotion. They are not deleted during promotion, so rollback remains possible. +The new pool budget does not include legacy copies: monitor total filesystem usage +and retire legacy data only after validating rollout. Uploaded ZIP originals and +other durable source material are untouched. Repository removal invalidates access +and project mappings, while shared blobs remain subject to global eviction. + +The HTTP fast path applies to individual file responses backed by the shared source +pool, including small text files. Decisions include content identity, path, project +context, all transformation options, generation/revision, mask, hostname and engine +version. Unchanged decisions serve the original representation. Changed output has +its own bounded pool. Gzip negotiation honors quality values, uses `Vary`, and +preserves MIME type. File validators are weak when shared delivery is enabled so +identity and gzip representations can revalidate the same logical content. HEAD +continues to use metadata only. Range requests receive a complete response; this +implementation does not add random access into gzip files. Website rendering keeps +its renderer cache; ZIP scans do not admit bulk entries into the source blob pool. + +The admin overview's Cache section reads `/api/admin/cache?minutes=60` behind the +existing admin authorization. Windows are 15 minutes, one hour, 24 hours and seven +days. SQLite telemetry batches at most 512 groups every five seconds and retains +minute aggregates for 48 hours and hourly aggregates for 30 days. No paths, terms, +user IDs or blob hashes appear in metric labels. The UI distinguishes unavailable +telemetry, dropped events, disabled storage and empty windows. Rows separate file, +website, ZIP, background and known-monitor traffic. Monitor classification is an +operational heuristic, not a complete bot detector. + +Hit counts and byte hit rates measure source lookups; misses classify first observed +keys, known misses and eviction refetches within bounded seven-day history. Reuse +intervals are consecutive blob accesses, not distinct people or browser visits. +Eviction time measures idle age; codec and inspection timings are elapsed work time, +not CPU samples. Cached decisions are separate from actual inspections. Minute and +hour boundaries make the displayed windows approximate. + +Run the reproducible acceptance workload with: + +```sh +node scripts/cache-workload.js docs/cache-workload-results.json +npx mocha test/shared-blob-cache.test.js test/shared-cache-http.test.js +``` + +The JSON report asserts cross-project source reuse, unchanged-decision reuse, +changed-output reuse, gzip delivery and budget enforcement. Its compression ratio +comes from synthetic text and must not be presented as a production projection. +Production rollout should compare request/byte hit rates, eviction refetches, p95 +latency, upstream errors and free disk over a representative week, with large files, +ZIP work and known monitors visible separately. + +### Benefits and costs + +| Choice | Benefit | Cost or limit | +| --- | --- | --- | +| Global content identity | Reuses identical files across paths and projects; renames do not duplicate content | Requires verified hashes and authorization on every request; uses digest-prefix directories to avoid one huge directory | +| Byte budget with approximate LRU | Predictable blob footprint and automatic reclamation | Evicted files incur upstream fetches; active readers can temporarily prevent admission | +| Selective gzip | Reduces payload storage and can serve compressed bytes directly | First-fill compression costs work; identity consumers and uncached anonymization require decoding | +| Rule-aware decisions and results | Repeated unchanged reads skip regex inspection; changed output is reusable | More metadata and a separate output budget; settings changes produce new decisions | +| SQLite coordination and telemetry | Cross-process coordination without another service; admin can measure actual reuse and rewrite work | Local-filesystem scope; short synchronous transactions; metadata/headroom are outside blob budgets | + +### Rollout sequence + +1. Deploy with shared storage disabled and collect legacy hits, inspections and codec + timings. Keep known-monitor traffic separate from file readers. +2. Enable the shared cache on the single-host filesystem deployment with both byte + budgets configured. Keep legacy copies for rollback. +3. Compare a representative week of byte/request hits, rewrite decisions, eviction + refetches, request latency, upstream errors and whole-device free space. Adjust + admission size and budgets from those observations. +4. Retire legacy cache copies only after the rollback window. Uploaded originals + remain durable and are never candidates for shared-pool eviction. + +The implementation and acceptance workload are local changes; this work does not +enable or migrate production storage. + +### Production observations used for this design + +The read-only audit on 2026-11-02 found 425,312 source files across 31,522 projects, +containing 144.32 GB of payload. Deduplication within projects could remove 1.87 GB; +global deduplication could remove 2.93 GB total (about 2.03%), including another +1.06 GB across projects. One file could not be read. These are decimal GB and +payload savings, not a compression estimate or the expected new working-set size. + +The preceding 24-hour access sample contained 29,980 successful file-body responses, +including 9,249 repeat responses (30.9%). URL repetitions are not the same as blob +cache hits. A separate approximately two-hour metric window recorded 2,302 source +hits out of 3,600 lookups (63.9%). This supports retaining a bounded source cache; +it does not establish the optimal byte budget. + +In the uniform anonymization replay, 937 resident files were measured: 764 text, +173 binary, and 21 with changed output. Thirteen resolved files exceeded the 4 MiB +sample limit, and missing files/mappings were excluded. The sample's mean gzip-6 +work was 1.46 ms per file and mean decompression was 0.24 ms; these replay timings +are not live-request latency or a forecast for large files. Continuous telemetry is +needed to replace these samples with representative workload measurements. + +### Local acceptance evidence + +The checked-in `cache-workload-results.json` is generated by assertions, not hand +written. Five file requests across two projects needed one upstream source fill; +unchanged and changed responses reused decisions, and changed bytes occupied one +result blob. The 64 KiB eviction workload ended at 53,248 allocated bytes with no +remaining fill reservations. Compression figures describe this synthetic fixture. + +Validation also covers separate operating-system producers, failed/invalid fills, +crash publication recovery, active-reader eviction protection, LFS pointer/payload +verification, gzip negotiation, rule changes, admin authorization and HEAD/304. +The disposable MongoDB/Redis performance integration run passed 130 tests. The +admin Cache section was checked at 1280 px and 390 px, including filter layout, +scrollable tables, empty filters and unavailable telemetry. + +The final complete default test run recorded 1,062 passing, 159 pending and one +failure: `test/error-codes.test.js` reports nine missing frontend translations for +the pre-existing maintenance API changes. Cache tests passed in that full run. +TypeScript compilation, the scoped lint checks (existing warnings only), the UI +build and `git diff --check` passed. Production rollout was not performed. + +## Initial cache performance evaluation, 2026-11-02 + +The initial implementation passed functional checks, but its metadata write path regressed small-file performance. The following measurements are preserved as the before-optimization baseline; the implementation and follow-up results below supersede the recommendations in this section. These are local measurements, not production capacity estimates. + +### Warm changed-text responses + +Each percentile pools two batches. Serial measurements contain 32 requests; concurrency-eight measurements contain 64. The small/medium baseline reads a local raw source and repeats anonymization/gzip. The 2 MiB baseline additionally uses the existing transformed-file cache, with 99 measured cache hits out of 100 requests. Authentication and Redis coordination are outside this comparison. + +| File | Baseline median, ms | Current median, ms | Experimental NORMAL median, ms | Baseline p95 at 8 clients, ms | Current p95 at 8 clients, ms | NORMAL p95 at 8 clients, ms | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | +| 16 KiB | 8.3 | 44.9 | 6.9 | 71.8 | 462.1 | 46.8 | +| 256 KiB | 36.5 | 45.9 | 11.7 | 250.8 | 444.1 | 89.6 | +| 2 MiB | 236.2 | 60.5 | 26.0 | 929.2 | 528.2 | 324.8 | + +### Findings + +- The cache hit path performs synchronous SQLite writes for reader leases, reuse history and release. The temporary-database A/B changes only pool connections to `PRAGMA synchronous=NORMAL`; the measured reduction supports commit latency as a major bottleneck. This is a diagnostic experiment, not an implemented fix. +- NORMAL in WAL mode can lose recent committed transactions following power loss or a system crash. Validate recovery/accounting before changing the durability of disposable cache indexes. See [SQLite synchronous documentation](https://www.sqlite.org/pragma.html#pragma_synchronous). +- For changed 2 MiB content at eight clients, current shared caching reduced combined client/server CPU from 253.2 to 55.6 ms per request. Peak sampled RSS was 308.0 versus 296.7 MiB. These are whole-process values, including runtime, HTTP client and worker threads. +- Synthetic text transferred about 62.2% fewer bytes with gzip. Incompressible 256 KiB binary data was stored and served as identity, avoiding ineffective gzip storage. These compression ratios are not production projections. +- Cold responses include first-use initialization. For 16 KiB changed text they took 145.9 ms in the baseline, 709.8 ms currently, and 212.0 ms in the NORMAL experiment. Do not use this single cold sample as steady-state miss latency. +- At 100,000 synthetic blob rows, a single pool stats query took 78.7 ms p95 synchronously; saving a decision took 45.5 ms p95. Cache/materialize admin aggregates and reduce retention scans on request paths. Dummy blob rows have no files, so this measures metadata scaling, not full directory reconciliation. +- A 4 MiB pool cycling sequentially over 100 distinct 64 KiB objects stayed below budget, but all 300 reads fetched again. Its working set was larger than the pool. Reuse, request order and admission policy must inform the budget; LRU alone cannot guarantee hits. + +### Reproduce and limitations + +Node v24.14.1, Linux, Intel Xeon E312xx (Sandy Bridge, IBRS update), 12 logical CPUs. This is a shared host with background load, warm OS page cache, loopback HTTP and a synthetic 20 ms upstream wait. It excludes real upstream bandwidth, TLS, reverse proxies, database authorization, multi-process throughput and production request distributions. Small samples and fixed scenario order mean p95 and speedup ratios are descriptive. An initial ts-node exploration was superseded by the compiled results below. The metadata probe does no worker execution, and excludes TypeScript loading from its timed samples. + +```sh +npx tsc --incremental false +CACHE_BENCH_COMPILED=1 node scripts/cache-performance.js +CACHE_BENCH_COMPILED=1 node scripts/cache-performance.js docs/cache-performance-normal-results.json --normal +CACHE_BENCH_COMPILED=1 node scripts/cache-performance.js docs/cache-performance-legacy-results.json --legacy +node scripts/cache-index-performance.js +``` + +All 2,700 HTTP responses were checked against expected bytes or a validated wire digest. Eviction assertions passed. Raw latency samples, CPU, RSS, event-loop delay, storage and metric counters are in `cache-performance-results.json`, `cache-performance-normal-results.json`, `cache-performance-legacy-results.json` and `cache-index-performance-results.json`. `cache-performance-summary.json` contains pooled comparisons. + +Before rollout: reduce per-read durable commits without weakening active-reader eviction protection; consider NORMAL only for rebuildable indexes with crash/recovery tests; replace full admin stats scans with cached aggregates; then replay a representative mixed workload with several server processes. Application defaults and production were not changed by this evaluation. + + +## Optimized implementation, 2026-11-02 + +The pool now uses NORMAL WAL commits for reader leases, coarsened access history, +anonymization decisions and telemetry. Admission reservations, publication intent +before rename, and final blob/alias publication still use FULL commits. Payload +fsync remains in place. Reader leases still become visible immediately to other +processes and protect active streams from eviction. This saves hit-path disk +flushes without making payload accounting depend on disposable history. + +Recent disposable metadata and telemetry can be lost after system failure. +Reservation and publication recovery conservatively retain accounting until files +are indexed or removed; missing payload files are invalidated and fetched again. +The SIGKILL test stops an actual producer after rename and before index publication, +then verifies reservation retention, orphan cleanup and successful refill. This +tests process failure, not a physical power cut. + +Admin pool statistics now read transactional counters and an indexed oldest-access +lookup. Counters are initialized once for an existing index and maintained by +SQLite triggers in the same transactions as row changes. Decision/history/alias +retention deletes only excess rows through indexes. Expired decision/history +cleanup is limited to 256 rows each per admission or maintenance pass. Access +history persists at most once per key per 30 seconds, so reuse-window boundaries +have that resolution. Metadata remains capped at 100,000 decisions/history rows +and 200,000 aliases per pool. + +Stop all cache-using processes together before upgrading an existing index, then +restart them on the same version. Do not mix old and new writers during migration. +The admin API response shape is unchanged. Shared caching remains opt-in with +`SHARED_CACHE_ENABLED=true`; production configuration was not changed. + +The tradeoff is intentional: cache hits avoid durable flushes, while cold fills +still pay for durable publication and compression. Trigger updates add a small +amount of write work in exchange for constant-time aggregate reads. Approximate +LRU and fixed budgets can still thrash when the working set exceeds the pool. + + +### Follow-up measurements and validation + +All 2,200 responses in the complete optimized HTTP run and all 300 in the focused +repeat matched expected output. The repeat ran after this task's other tests and +benchmarks ended. The early scenarios in the complete run overlapped the metadata +probe, so both results are retained rather than treating the faster run as a +universal estimate. These remain small synthetic samples on a shared host. + +- 16 KiB changed text: warm serial median 44.9 → 7.3 ms; eight-client p95 462.1 → 114.9 ms. +- 256 KiB changed text: warm serial median 45.9 → 9.0 ms; eight-client p95 444.1 → 107.6 ms. +- 2048 KiB changed text: warm serial median 60.5 → 19.0 ms; eight-client p95 528.2 → 216.2 ms. + +At 100,000 synthetic blob rows, admin stats p95 fell from 78.70 to 0.50 ms, +decision-write p95 from 45.47 to 1.11 ms, and warm-source-hit p95 from 82.99 to +6.37 ms. The 4 MiB eviction probe peaked at 3,997,696 allocated bytes; all budget +assertions passed. Its oversized sequential working set still produced no hits. + +The final full suite recorded 1,065 passing, 159 pending and the existing single +error-code translation failure (nine maintenance API codes). New counter, +durability-mode and SIGKILL recovery tests passed, as did HTTP and admin UI +regressions. TypeScript, scoped lint and diff whitespace checks passed. +Production rollout and representative multi-process throughput testing remain +outside this local evaluation. + +Reproduce the follow-up without overwriting the original baselines: + +```sh +npx tsc +CACHE_BENCH_COMPILED=1 node scripts/cache-performance.js docs/cache-performance-optimized-results.json +node scripts/cache-index-performance.js docs/cache-index-performance-optimized-results.json +CACHE_BENCH_COMPILED=1 node scripts/cache-performance.js docs/cache-performance-optimized-repeat-results.json --shared +``` + +Raw results and the pooled comparison are in the corresponding +`cache-*-optimized-*.json` files. + +### PR integration validation + +Reapplied the cache changes onto main at `d0b217a` in an isolated checkout. +The production build and scoped ESLint passed, and 199 cache, HTTP, admin access, +HEAD/revalidation and Vue UI tests passed. Integration also covers public +submodule origin selection and withholding parent credentials. The historical +full-workspace and benchmark measurements above were not rerun as part of this +PR preparation. diff --git a/public/asset-manifest.json b/public/asset-manifest.json index ca5bd4c..6c1b068 100644 --- a/public/asset-manifest.json +++ b/public/asset-manifest.json @@ -1,8 +1,8 @@ { "core.min.js": "core.4a77c8ac41.min.js", - "vendor.min.js": "vendor.906b828b05.min.js", + "vendor.min.js": "vendor.208b4c16f4.min.js", "mermaid.min.js": "mermaid.a7356d5ed1.min.js", - "all.min.css": "all.7b7927afcc.min.css", + "all.min.css": "all.83492de3a4.min.css", "markdown.min.js": "markdown.6c8dfb7b1d.min.js", "pdf.min.js": "pdf.4d9cc6ff49.min.js", "notebook.min.js": "notebook.c3144c18ae.min.js", diff --git a/public/css/all.min.css b/public/css/all.min.css index f3b0c02..7fb52ec 100644 --- a/public/css/all.min.css +++ b/public/css/all.min.css @@ -6,4 +6,4 @@ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 0%;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}/*! * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-brands-400.eot);src:url(../fonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-brands-400.woff2) format("woff2"),url(../fonts/fa-brands-400.woff) format("woff"),url(../fonts/fa-brands-400.ttf) format("truetype"),url(../fonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:'Font Awesome 5 Brands';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-regular-400.eot);src:url(../fonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-regular-400.woff2) format("woff2"),url(../fonts/fa-regular-400.woff) format("woff"),url(../fonts/fa-regular-400.ttf) format("truetype"),url(../fonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:'Font Awesome 5 Free';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;font-display:block;src:url(../fonts/fa-solid-900.eot);src:url(../fonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-solid-900.woff2) format("woff2"),url(../fonts/fa-solid-900.woff) format("woff"),url(../fonts/fa-solid-900.ttf) format("truetype"),url(../fonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:'Font Awesome 5 Free';font-weight:900}.nb-notebook{line-height:1.5}.nb-stderr,.nb-stdout{white-space:pre-wrap;margin:1em 0;padding:.1em .5em}.nb-stderr{background-color:#faa}.nb-cell+.nb-cell{margin-top:.5em}.nb-output table{border:1px solid #000;border-collapse:collapse}.nb-output th{font-weight:700}.nb-output td,.nb-output th{border:1px solid #000;padding:.25em;text-align:left;vertical-align:middle;border-collapse:collapse}.nb-notebook blockquote{border-left:5px solid #ccc;margin-left:0;padding-left:1em}.nb-cell{position:relative}.nb-raw-cell{white-space:pre-wrap;background-color:#f5f2f0;font-family:Consolas,Monaco,'Andale Mono',monospace;padding:1em;margin:.5em 0}.nb-output{min-height:1em;width:100%;overflow-x:scroll;border-right:1px dotted #ccc}.nb-output img{max-width:100%}.nb-input:before,.nb-output:before{position:absolute;font-family:monospace;color:#999;left:-7.5em;width:7em;text-align:right}.nb-input:before{content:"In [" attr(data-prompt-number) "]:"}.nb-output:before{content:"Out [" attr(data-prompt-number) "]:"}// Fix pandas dataframe formatting div[style="max-height:1000px;max-width:1500px;overflow:auto;"]{max-height:none!important}@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,math,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.18.10"}.katex .katex-mathml{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.katex-newline{display:block}.katex .katex-base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .katex-base,.katex .katex-strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .katex-vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .katex-thinbox{display:inline-flex;flex-direction:row;max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .katex-hdashline,.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-rule,.katex .katex-underline .underline-line,.katex .mfrac .frac-line{min-height:1px}.katex .mspace{display:inline-block}.katex .katex-smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.katex-inner,.katex .llap>.katex-inner,.katex .rlap>.katex-inner{position:absolute}.katex .clap>.katex-fix,.katex .llap>.katex-fix,.katex .rlap>.katex-fix{display:inline-block}.katex .llap>.katex-inner{right:0}.katex .clap>.katex-inner,.katex .rlap>.katex-inner{left:0}.katex .clap>.katex-inner>span{margin-left:-50%;margin-right:50%}.katex .katex-rule{border:0 solid;display:inline-block;position:relative}.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .katex-hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.katex-root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .katex-sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .katex-sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .katex-sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .katex-sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .katex-sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .katex-sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .katex-sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .katex-sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .katex-sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .katex-sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .katex-sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .katex-sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .katex-sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .katex-sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .katex-sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .katex-sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .katex-sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .katex-sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .katex-sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .katex-sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .katex-sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .katex-sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .katex-sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .katex-sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .katex-sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .katex-sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .katex-sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .katex-sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .katex-sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .katex-sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .katex-sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .katex-sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .katex-sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .katex-sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .katex-sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .katex-sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .katex-sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .katex-sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .katex-sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .katex-sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .katex-sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .katex-sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .katex-sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .katex-sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .katex-sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .katex-sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .katex-sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .katex-sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .katex-sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .katex-sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .katex-sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .katex-sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .katex-sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .katex-sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .katex-sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .katex-sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .katex-sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .katex-sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .katex-sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .katex-sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .katex-sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .katex-sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .katex-sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .katex-sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .katex-sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .katex-sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .katex-sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .katex-sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .katex-sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .katex-sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .katex-sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .katex-sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .katex-sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .katex-sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .katex-sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .katex-sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .katex-sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .katex-sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .katex-sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .katex-sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .katex-sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .katex-sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .katex-sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .katex-sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .katex-sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .katex-sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .katex-sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .katex-sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .katex-sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .katex-sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .katex-sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .katex-sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .katex-sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .katex-sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .katex-sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .katex-sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .katex-sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .katex-sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .katex-sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .katex-sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .katex-sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .katex-sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .katex-sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .katex-sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .katex-sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .katex-sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .katex-sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .katex-sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .katex-sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .katex-sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .katex-sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .katex-sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .katex-sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .katex-sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .katex-sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .katex-sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .katex-sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .katex-sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .katex-sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .katex-sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .katex-sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .katex-accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .katex-accent .accent-body{position:relative}.katex .katex-accent .accent-body:not(.accent-full){width:0}.katex .katex-overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .katex-stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .katex-stretchy:after,.katex .katex-stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .katex-sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .reflectbox{display:inline-block;transform:scaleX(-1)}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.katex-tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.katex-tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.mermaid{text-align:center;margin:1em 0;overflow:auto}.mermaid svg{max-width:100%;height:auto}.dark-mode .mermaid{filter:invert(1) hue-rotate(180deg)}.dark-mode .mermaid svg{background:0 0}.dark-mode .mermaid .edgeLabel,.dark-mode .mermaid .nodeLabel{filter:invert(1) hue-rotate(180deg)}.mermaid .node circle,.mermaid .node ellipse,.mermaid .node polygon,.mermaid .node rect{stroke-width:2px}.mermaid .flowchart-link{stroke-width:2px}.mermaid .actor{fill:#f9f9f9;stroke:#333;stroke-width:2px}.mermaid .messageLine0,.mermaid .messageLine1{stroke:#333;stroke-width:1.5px}.mermaid .section0,.mermaid .section1,.mermaid .section2,.mermaid .section3{opacity:.8}.mermaid .pieChart .slice{opacity:.9}.markdown-body .mermaid{background:0 0;border:none;padding:10px}.mermaid .error{color:#d32f2f;font-family:monospace;font-size:12px;padding:10px;border:1px solid #d32f2f;border-radius:4px;background-color:#ffebee}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff')}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.5;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{color:#fafbfc;background-color:#b31d28}.markdown-body .pl-c2{color:#fafbfc;background-color:#d73a49}.markdown-body .pl-c2::before{content:"^M"}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#22863a}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#005cc5}.markdown-body .pl-mi{font-style:italic;color:#24292e}.markdown-body .pl-mb{font-weight:700;color:#24292e}.markdown-body .pl-md{color:#b31d28;background-color:#ffeef0}.markdown-body .pl-mi1{color:#22863a;background-color:#f0fff4}.markdown-body .pl-mc{color:#e36209;background-color:#ffebda}.markdown-body .pl-mi2{color:#f6f8fa;background-color:#005cc5}.markdown-body .pl-mdr{font-weight:700;color:#6f42c1}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{text-decoration:underline;color:#032f62}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit}.markdown-body strong{font-weight:bolder}.markdown-body h1{font-size:2em;margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body hr{box-sizing:content-box;height:0;overflow:visible}.markdown-body input{font:inherit;margin:0}.markdown-body input{overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:0 0;border:0;border-bottom:1px solid #dfe2e5}.markdown-body hr::before{display:table;content:""}.markdown-body hr::after{display:table;clear:both;content:""}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}.markdown-body .octicon{vertical-align:text-bottom}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:0}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{padding-bottom:.3em;font-size:2em;border-bottom:1px solid #eaecef}.markdown-body h2{padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#6a737d}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body code{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.dark-mode{--canvas-bg-color:#1B1916;--sidebar-bg-color:#1A1918;--main-bg-color:#1B1916;--header-bg-color:#1A1918;--hover-bg-color:rgba(255, 255, 255, 0.05);--header-color:#FAF9F6;--color:#D6D1C5;--link-color:#A7B2FF;--link-hover-color:#C8CEFF;--border-color:#33302B;--border-soft:#2A2825;--btn-color:#FAF9F6;--input-color:#E6E1D8;--input-bg:#25231F;--primary-bg:#FAF9F6;--primary-hover-bg:#FFFFFF;--primary-color:#1A1815;--primary-active-color:#1A1815;--accent:#A7B2FF;--accent-soft:rgba(167, 178, 255, 0.12);--ink-muted:#A39D92;--ink-faint:#8A857C;--ink-soft:#B5AFA2;--status-ready:#5FB27A;--status-progress:#E0A94A;--status-error:#F08A82;--status-inactive:#8A857C;--status-error-soft:rgba(240, 138, 130, 0.08);--status-error-soft-hover:rgba(240, 138, 130, 0.14);--admin-nav-bg:#1A1918;--admin-nav-active:rgba(167, 178, 255, 0.12);--admin-stat-bg:#25231F;--paper-card:#25231F;--paper-bg-alt:#201E1B;--highlight:#3A341E;background-color:var(--canvas-bg-color);color:var(--color)}body{--canvas-bg-color:#FAF9F6;--sidebar-bg-color:#FFFFFF;--header-bg-color:#FAF9F6;--header-color:#1A1815;--main-bg-color:#FAF9F6;--hover-bg-color:rgba(26, 24, 21, 0.05);--input-color:#1A1815;--color:#1A1815;--link-color:#3B4AD6;--link-hover-color:#2E3BB8;--border-color:#E6E1D8;--border-soft:#EDE9E1;--btn-color:#1A1815;--input-bg:#FFFFFF;--primary-bg:#1A1815;--primary-hover-bg:#000000;--primary-color:#FAF9F6;--primary-active-color:#FAF9F6;--accent:#3B4AD6;--accent-soft:#EEF0FF;--ink-muted:#6F6A61;--ink-faint:#8A857C;--ink-soft:#4A4641;--paper-bg-alt:#F3F1EC;--paper-card:#FFFFFF;--highlight:#FFF3C4;--status-ready:#2F7A44;--status-progress:#946512;--status-error:#B42318;--status-inactive:#8A857C;--status-error-soft:rgba(180, 35, 24, 0.04);--status-error-soft-hover:rgba(180, 35, 24, 0.08);--radius-control:6px;--radius-button:8px;--button-height:36px;--button-font-size:14px;--button-line-height:20px;--button-padding-x:13px;--button-compact-height:32px;--radius-surface:10px;--font-serif:'Instrument Serif','Iowan Old Style',Georgia,serif;--font-sans:'Inter',ui-sans-serif,system-ui,-apple-system,sans-serif;--font-mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;background-color:var(--canvas-bg-color);color:var(--color);font-family:var(--font-sans);font-size:14px;letter-spacing:-.005em;line-height:1.5}.fadeIn{opacity:1;animation-name:fadeInOpacity;animation-iteration-count:1;animation-timing-function:ease-in;animation-duration:.6s}@keyframes fadeInOpacity{0%{opacity:0}100%{opacity:1}}.btn:active,.btn:focus{box-shadow:none}:focus:not(:focus-visible){outline:0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn:focus-visible,.dropdown-item:focus-visible,.form-control:focus-visible{outline:2px solid var(--accent);outline-offset:2px;box-shadow:none}input:active,input:hover{box-shadow:none!important}input:-webkit-autofill,input:-webkit-autofill:focus,input:-webkit-autofill:hover,select:-webkit-autofill,select:-webkit-autofill:focus,select:-webkit-autofill:hover,textarea:-webkit-autofill,textarea:-webkit-autofill:focus,textarea:-webkit-autofill:hover{border-color:var(--border-color);-webkit-text-fill-color:var(--color);-webkit-box-shadow:none;transition:background-color 1000s ease-in-out 0s}.custom-select,.form-control,input:-internal-autofill-selected{color:var(--input-color);background-color:var(--input-bg)!important;border-color:var(--border-color)}.form-control:focus{border-color:var(--border-color)}body,html{position:relative;height:100%;overflow-x:hidden}body{overflow-y:hidden}#app{flex:1 1 auto;min-height:0}.app-header{flex:0 0 auto}.app-view{display:block;flex:1 1 auto;min-height:0;overflow-x:hidden!important;overflow-y:auto!important;max-width:100%}.markdown-body a,a{color:var(--link-color)}.markdown-body a:hover,a:hover{text-decoration:none;color:var(--link-hover-color)}.dropdown-menu a.dropdown-item{color:var(--color)}.dropdown-menu a.dropdown-item:hover{color:var(--color);text-decoration:none}.markdown-body .emoji{height:1.3em;margin:0;vertical-align:-.1em}.navbar.navbar-expand-lg{background:var(--header-bg-color)!important;border-bottom:1px solid var(--border-color);transition:background-color .5s ease;padding:10px max(20px,calc((100vw - 1200px)/ 2));font-family:var(--font-sans)}.navbar-toggler{border:1px solid var(--border-color)!important;color:var(--color)!important}.navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}.navbar .navbar-nav{align-items:center}.navbar .nav-link{display:inline-flex;align-items:center;font-size:13px;color:var(--ink-muted)!important;padding:6px 0!important;margin:0 12px;border-bottom:1px solid transparent;letter-spacing:-.005em;line-height:1}.navbar .nav-link:hover{color:var(--color)!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--color)}.navbar .nav-link.nav-icon{padding:0!important;margin:0 8px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:15px;line-height:1}.navbar #navbarSupportedContent{align-items:center}.navbar-brand{font-family:var(--font-serif)!important;font-size:20px!important;letter-spacing:-.01em;color:var(--color)!important;padding-right:18px;margin-right:12px;border-right:1px solid var(--border-color)}.navbar-brand em,.navbar-brand i{font-style:italic;font-weight:400}.navbar-dark .navbar-toggler{border-color:var(--border-color);color:var(--color)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar .btn-signin{display:inline-flex;align-items:center;height:32px;padding:0 14px!important;margin-left:6px;border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color)!important;border-radius:6px;font-size:13px;font-weight:500;line-height:1}.navbar .btn-signin:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color)!important}.navbar .nav-support{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;order:3;gap:6px;min-height:36px;margin-left:12px;padding:0 12px;border:1px solid var(--border-color);border-radius:8px;color:var(--color);font-size:13px;font-weight:500;text-decoration:none}.navbar .nav-support:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}@media (max-width:991px){.navbar .nav-support{order:0;width:44px;min-height:44px;margin:0 8px 0 auto;padding:0}.navbar .nav-support-label{display:none}[class*=floatingchat-container-wrap],iframe.floatingchat-container{display:none!important}}.navbar .user-chip{display:inline-flex!important;align-items:center;gap:8px;padding:4px 12px 4px 6px!important;margin-left:6px;border:1px solid var(--border-color);border-radius:999px;background:var(--sidebar-bg-color);font-size:13px;color:var(--color)!important}.navbar .user-chip:hover{background:var(--hover-bg-color)}.navbar .user-chip img{width:22px;height:22px}.navbar .user-chip .user-chip-name{color:var(--color);font-weight:500}.navbar .user-chip::after{color:var(--ink-muted)}#navbarSupportedContent{padding-right:0}.generalMessage{display:block;text-align:center;color:var(--header-color)}.rgba-gradient{background:var(--canvas-bg-color);color:var(--color)}.paper-landing{overflow-x:clip}.paper-wrap{max-width:1140px;margin-left:auto;margin-right:auto;padding-left:32px;padding-right:32px}.paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500}.paper-hero{max-width:1140px;margin:0 auto;padding:64px 32px 0;display:grid;grid-template-columns:.95fr 1.05fr;gap:48px;align-items:center}.paper-hero h1.hero-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.4vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:14px 0 0;color:var(--color);text-wrap:balance}.paper-hero h1 .accent{color:var(--accent);font-style:italic}.hero-subtitle{margin-top:18px;font-size:18px;line-height:1.55;color:var(--ink-soft);max-width:30em;text-wrap:pretty}.paper-cta-row{display:flex;flex-wrap:wrap;gap:18px;align-items:center;margin-top:26px}.btn-hero{display:inline-flex;align-items:center;font-family:var(--font-sans);border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control);letter-spacing:-.005em;transition:background .15s,border-color .15s,transform .1s}.btn-hero:hover{background:var(--primary-hover-bg);border-color:var(--primary-hover-bg);color:var(--canvas-bg-color);text-decoration:none;transform:translateY(-1px)}.btn-hero-ghost{background:0 0;border:1px solid var(--border-color);color:var(--color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control)}.btn-hero-ghost:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}.paper-link-arrow{font-size:14px;color:var(--ink-soft);text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--border-color)}.paper-link-arrow:hover{color:var(--color);text-decoration-color:var(--color)}.paper-reassure{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px;color:var(--ink-muted)}.paper-reassure li::before{content:"\2713";color:var(--status-ready);margin-right:6px;font-size:11px}.paper-frame{border-radius:var(--radius-surface);background:var(--paper-card);border:1px solid var(--border-color);box-shadow:0 24px 60px rgba(26,24,21,.1),0 2px 6px rgba(26,24,21,.04);overflow:hidden}.dark-mode .paper-frame{box-shadow:0 24px 60px rgba(0,0,0,.45)}.paper-frame-bar{display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;border-bottom:1px solid var(--border-soft);background:var(--paper-bg-alt);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted)}.paper-frame-bar .dots{display:flex;gap:5px}.paper-frame-bar .dots i{width:8px;height:8px;border-radius:50%;background:var(--border-color)}.paper-frame-bar .url{flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-frame img{display:block;width:100%;height:auto}.paper-hero-shot .paper-frame{width:112%}.paper-proof{margin-top:64px;padding-top:18px;padding-bottom:18px;border-top:1px solid var(--border-color);display:flex;flex-wrap:wrap;gap:12px 30px;align-items:center}.paper-proof-venues{display:flex;gap:22px;align-items:center;font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--ink-soft)}.paper-proof-venues i{font-style:normal;font-family:var(--font-sans);font-size:14px;color:var(--ink-faint)}.paper-stats{margin-top:12px;padding-top:22px;border-top:1px solid var(--border-color)}.paper-stats-meta{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:14px}.paper-stats-meta-right{display:inline-flex;align-items:center;gap:6px}.paper-stats-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--status-ready)}.paper-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color)}.paper-stat-card{display:flex;flex-direction:column;padding:22px 26px 20px 0;margin-right:26px;border-right:1px solid var(--border-color);min-width:0}.paper-stat-card:last-child{border-right:0;margin-right:0;padding-right:0}.paper-stat-value{font-size:44px;font-weight:500;letter-spacing:-.04em;line-height:1;color:var(--color);font-variant-numeric:tabular-nums}.paper-stat-label{margin-top:6px;font-size:13px;color:var(--ink-soft)}.paper-stat-bars{display:block;width:100%;height:34px;margin-top:18px;overflow:visible}.paper-stat-bars rect{fill:var(--border-color)}.paper-stat-bars rect.is-latest{fill:var(--accent)}.paper-stat-delta{margin-top:10px;font-family:var(--font-mono);font-size:11px;color:var(--status-ready)}.paper-section-head{margin-top:110px;display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:end}.paper-qa h2,.paper-section-head h2{font-family:var(--font-serif);font-weight:400;font-size:clamp(2rem,4.2vw,3.25rem);line-height:1.05;letter-spacing:-.02em;margin:10px 0 0;color:var(--color);text-wrap:balance}.paper-feature-title em,.paper-qa h2 em,.paper-section-head h2 em{font-style:italic;color:var(--accent)}.paper-section-head p{font-size:15px;color:var(--ink-soft);max-width:32em;margin:0;line-height:1.6}.paper-preview{margin-top:28px;display:grid;grid-template-columns:1fr 1fr;gap:14px}.paper-preview .pane{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);overflow:hidden;min-width:0}.paper-preview .pane-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;border-bottom:1px solid var(--border-soft)}.paper-preview .pane-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap}.paper-preview .pane-url{font-family:var(--font-mono);font-size:11px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.paper-preview .pane-body{padding:16px 18px;font-family:var(--font-mono);font-size:13px;line-height:1.9;color:var(--ink-soft)}.paper-preview .pane-body strong{color:var(--color);font-weight:600}.paper-preview .tok{color:var(--ink-faint)}.paper-preview .redact{background:var(--accent-soft);color:var(--accent);border-radius:4px;padding:0 5px}.paper-features{margin-top:28px;padding-top:28px;border-top:1px solid var(--border-color);display:grid;grid-template-columns:5fr 7fr;gap:48px;align-items:start}.paper-features-list{display:flex;flex-direction:column}.paper-feature{border-left:2px solid var(--border-soft);padding:16px 0 16px 20px;transition:border-color .2s}.paper-feature.is-on{border-left-color:var(--color)}.paper-feature-tab{all:unset;display:block;width:100%;cursor:pointer;color:inherit;border-radius:4px}.paper-feature-tab:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.paper-feature-tab .paper-eyebrow{display:block;margin-bottom:6px}.paper-feature-title{display:block;font-family:var(--font-serif);font-size:24px;line-height:1.15;letter-spacing:-.015em;color:var(--ink-muted);transition:color .2s}.paper-feature-title em{color:inherit}.paper-feature-tab:hover .paper-feature-title,.paper-feature.is-on .paper-feature-title{color:var(--color)}.paper-feature.is-on .paper-feature-title em{color:var(--accent)}.paper-feature-more{display:none}.paper-feature.is-on .paper-feature-more{display:block}.paper-feature-more .paper-feature-title-m{display:none}.paper-feature-more p{font-size:15px;color:var(--ink-soft);line-height:1.55;margin:10px 0 12px;max-width:30em}.paper-features-stage{min-width:0}.paper-feature-panel{animation:paper-feature-in .25s ease-out}@keyframes paper-feature-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.paper-feature-panel{animation:none}}.paper-crop{position:relative;height:380px;overflow:hidden;background:var(--paper-card)}.paper-crop img{position:absolute;left:0;top:0;max-width:none;height:auto;display:block}.paper-crop-anonymize img{width:150%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:160%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:150%;transform:translate(-6%,-9%)}.paper-qa{margin-top:110px;display:grid;grid-template-columns:1fr 1.4fr;gap:40px;align-items:start}.paper-qa h2{margin-bottom:12px}.paper-qa .q{border-top:1px solid var(--border-color);padding:18px 0}.paper-qa .q:last-child{border-bottom:1px solid var(--border-color)}.paper-qa .q a{display:block;font-weight:500;font-size:15px;color:var(--color);margin-bottom:6px}.paper-qa .q a:hover{color:var(--accent);text-decoration:none}.paper-qa .q p{margin:0;font-size:14px;color:var(--ink-soft);line-height:1.6}@media (max-width:1100px){.paper-hero-shot .paper-frame{width:100%}}@media (max-width:991px){.paper-hero{grid-template-columns:1fr;gap:36px;padding-top:40px}.paper-qa,.paper-section-head{grid-template-columns:1fr;gap:16px}.paper-stats-grid{grid-template-columns:1fr 1fr}.paper-stat-card:nth-child(2n){border-right:0;margin-right:0;padding-right:0}.paper-stat-card:nth-child(-n+2){border-bottom:1px solid var(--border-color)}}@media (max-width:767px){.paper-hero,.paper-wrap{padding-left:20px;padding-right:20px}.paper-hero h1.hero-title{font-size:clamp(2.4rem,11vw,3.25rem)}.hero-subtitle{font-size:16px}.paper-cta-row .btn-hero{width:100%;justify-content:center}.paper-proof{margin-top:48px}.paper-stat-card{padding:18px 16px 16px 0;margin-right:16px}.paper-stat-value{font-size:40px}.paper-qa,.paper-section-head{margin-top:72px}.paper-preview{grid-template-columns:1fr}.paper-preview .pane-body{font-size:12px;line-height:1.8}.paper-features{display:flex;flex-wrap:wrap;gap:0;padding-top:0;border-top:0;margin-top:24px}.paper-feature,.paper-features-list,.paper-features-stage{display:contents}.paper-feature-tab{order:1;flex:1 1 0;width:auto;padding:12px 0 10px;border-bottom:2px solid var(--border-color);border-radius:0;text-align:left}.paper-feature.is-on .paper-feature-tab{border-bottom-color:var(--color)}.paper-feature-tab .paper-eyebrow{margin:0;font-size:11px;letter-spacing:.08em}.paper-feature-tab .paper-feature-title{display:none}.paper-feature-panel{order:2;width:100%;margin-top:20px;animation:none}.paper-crop{height:240px}.paper-crop-anonymize img{width:230%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:240%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:220%;transform:translate(-3%,-9%)}.paper-feature-more{order:3;width:100%}.paper-feature.is-on .paper-feature-more{margin-top:18px}.paper-feature-more .paper-feature-title-m{display:block;font-size:28px;line-height:1.1}.paper-feature-more p{max-width:none}.paper-footer-inner>.paper-footer-brand{grid-column:1/-1}.paper-footer-foot{flex-direction:column;gap:6px}}.dropdown-menu{background-color:var(--paper-card,var(--main-bg-color))!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:8px!important;box-shadow:0 12px 28px rgba(26,24,21,.08),0 2px 6px rgba(26,24,21,.05)!important;padding:6px!important;font-family:var(--font-sans);font-size:13px;min-width:11rem}.dropdown-menu .dropdown-item{color:var(--color)!important;padding:7px 10px!important;border-radius:5px;font-size:13px}.dropdown-menu .dropdown-item:focus,.dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color)!important;color:var(--color)!important}.dropdown-menu .dropdown-divider{border-top-color:var(--border-color)!important;margin:4px 2px}.dropdown-menu .dropdown-header{color:var(--ink-muted);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.body,.file-content,.markdown-body{background-color:var(--main-bg-color)!important;color:var(--color)!important}.markdown-body table tr{background-color:var(--main-bg-color);border-top:1px solid var(--border-color)}.markdown-body table tr:nth-child(2n){background-color:var(--paper-bg-alt)}.markdown-body table td,.markdown-body table th{border:1px solid var(--border-color)}.file-content{padding:4px 7px;text-align:left;min-height:100%}.badge{font-size:75%;font-weight:500;padding:3px 8px;border-radius:10px;vertical-align:middle}.warning-feedback{width:100%;margin-top:.25rem;font-size:80%;color:#dc8e35}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--hover-bg-color)}.card-header .btn,.card-header .btn:focus,.card-header .btn:hover{border:none!important;background:0 0!important}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);vertical-align:middle;max-width:100%;transition:background-color 120ms ease,border-color 120ms ease,color 120ms ease;color:var(--btn-color);border:1px solid var(--border-color);background:var(--paper-card);border-radius:var(--radius-button);white-space:nowrap}.btn:active,.btn:hover{color:var(--btn-color);border:1px solid var(--border-color);background-color:var(--hover-bg-color);box-shadow:none!important}.btn.btn-primary{color:var(--primary-color);background-color:var(--primary-bg)}.btn.btn-primary:active,.btn.btn-primary:hover{color:var(--primary-active-color);background-color:var(--primary-hover-bg)!important}.btn::placeholder{color:var(--color);opacity:1}.white_border{border:1px solid #fff;color:#fff}.leftCol{display:flex;position:relative;flex:0 0 auto;width:100%;z-index:9;flex-direction:column}.card,.leftCol,.sidePanel{background-color:var(--sidebar-bg-color);border:1px solid var(--border-color)}@media (min-width:768px){.leftCol{flex:0 0 310px;width:310px;height:100%}}.leftCol-search{padding:10px 12px 0}.tree-search-box{display:flex;align-items:center;gap:8px;background:var(--canvas-bg-color);border:1px solid var(--border-color);border-radius:8px;padding:7px 10px;transition:border-color .15s}.tree-search-box:focus-within{border-color:var(--ink-muted)}.tree-search-icon{font-size:12px;color:var(--ink-muted);flex-shrink:0}.tree-search-input{flex:1;border:none;outline:0;background:0 0;font-family:var(--font-sans);font-size:13px;color:var(--color);min-width:0}.tree-search-input::placeholder{color:var(--ink-muted)}.tree-search-kbd{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:4px;padding:1px 6px;line-height:1.4;flex-shrink:0}.tree-search-clear{background:0 0;border:none;color:var(--ink-muted);font-size:16px;cursor:pointer;padding:0 2px;line-height:1}.tree-search-clear:hover{color:var(--color)}.leftCol-project-header{display:flex;align-items:baseline;justify-content:space-between;padding:12px 14px 4px;gap:8px}.project-name{font-family:var(--font-sans);font-size:13px;font-weight:600;color:var(--color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.project-file-count{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);white-space:nowrap;flex-shrink:0}.files{position:relative;display:block;overflow:auto;height:100%;padding:4px 6px}.files ul{list-style:none;margin:0;padding:0}.files li ul{padding-left:8px;margin-left:7px;border-left:1px solid var(--border-color)}.files .folder>ul{display:none}.files .folder.open>ul{display:block}.files .file,.files .folder{position:relative;color:var(--ink-soft);cursor:pointer;word-break:break-all}.files a{display:flex;align-items:center;gap:4px;padding:1px 8px 1px 2px;font-family:var(--font-sans);font-size:13px;color:var(--ink-soft);border-radius:4px;text-decoration:none;line-height:1.5;position:relative}.files a:hover{background:var(--hover-bg-color);color:var(--color);text-decoration:none}.files:focus{outline:0}.files a.tree-focused{background:var(--hover-bg-color);color:var(--color)}.files .file.active>a{background:rgba(128,128,128,.15);color:var(--color)}.files .file.active>a .tree-icon-file{color:#5b7ba5}.files .file.active>a .tree-count{color:var(--ink-muted)}.tree-icon-file,.tree-icon-folder{display:inline-block;flex-shrink:0}.tree-icon-folder{width:14px;height:12px;color:var(--ink-muted);opacity:.75}.tree-icon-folder svg{display:block;width:100%;height:100%;fill:currentColor;fill-opacity:0;stroke:currentColor;stroke-width:1.2;stroke-linejoin:round}.files .folder.open>a .tree-icon-folder{color:#a07d2e;opacity:.9}.files .folder.open>a .tree-icon-folder svg{fill-opacity:.12}.dark-mode .files .folder.open>a .tree-icon-folder{color:#c9a03a}.tree-icon-file{width:16px;font-size:14px;text-align:center;color:#5b7ba5}.dark-mode .files .file.active>a .tree-icon-file,.dark-mode .tree-icon-file{color:#7ba3d0}.tree-toggle{display:inline-flex;align-items:center;justify-content:center;width:10px;height:14px;flex-shrink:0;opacity:.6}.tree-toggle::after{content:"";display:block;width:0;height:0;border-style:solid;border-width:3px 0 3px 4.5px;border-color:transparent transparent transparent var(--ink-muted);transition:transform .12s ease}.files .folder.open>a .tree-toggle::after{transform:rotate(90deg)}.tree-spacer{display:inline-block;width:10px;flex-shrink:0}.tree-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-count{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);flex-shrink:0;margin-left:auto;padding-left:8px;opacity:.7}.files .folder>a{color:var(--color)}.files .file::before,.files .folder::before{display:none}.files .folder>a::after{display:none}.tree-search-path{color:var(--ink-muted);font-size:11px}.tree-search-empty{padding:16px 12px;color:var(--ink-muted);font-size:13px;font-family:var(--font-sans);text-align:center}.leftCol{background:var(--paper-bg-alt,#f3f1ec);border-right:1px solid var(--border-color)}.dark-mode .leftCol{background:var(--sidebar-bg-color)}.status-bar{background:var(--canvas-bg-color);border-bottom:1px solid var(--border-color);padding:10px 14px}.paths .breadcrumb-item,.paths .breadcrumb-item a{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paths .breadcrumb-item.active,.paths .breadcrumb-item:last-child{color:var(--color)}.paths .breadcrumb-item+.breadcrumb-item::before{content:'/';color:var(--ink-muted)}.last-update{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);padding:8px 10px;border-top:1px solid var(--border-color);letter-spacing:.02em}.ace_editor{height:100%}.ace_scroller{cursor:default}.status-bar{display:flex;align-items:center;gap:12px;background-color:var(--canvas-bg-color);padding:10px 14px;margin:0;border-bottom:1px solid var(--border-color);border-radius:0;flex-shrink:0}.status-bar-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.status-bar-actions .btn{display:inline-flex;align-items:center;gap:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;padding:4px 10px;font-size:13px;min-height:30px}.status-bar-actions .btn:hover{background:var(--hover-bg-color);color:var(--color)}.status-bar-actions .btn.btn-active{border-color:currentColor;font-weight:600}.paths{flex:1 1 auto;min-width:0;padding:0;margin:0;background-color:initial;border:none;border-radius:0;align-items:center;overflow-x:auto;white-space:nowrap;flex-wrap:nowrap}.paths::-webkit-scrollbar{display:none}.paths a{color:var(--color)}.paths .breadcrumb-item{padding-left:3px}.paths .breadcrumb-item::before{padding-right:3px}.content{height:100%;overflow:scroll;padding-top:42px;background-color:var(--main-bg-color);text-align:center}.image-content{max-width:100%;max-height:100%;text-align:center;padding:4px}.pdf-viewer{display:flex;flex-direction:column;height:100%;min-height:0;background-color:var(--main-bg-color)}.pdf-toolbar{display:flex;align-items:center;gap:4px;flex:0 0 auto;padding:4px 8px;border-bottom:1px solid var(--border-color,rgba(0,0,0,.12))}.pdf-toolbar-group{display:inline-flex;align-items:center;gap:4px}.pdf-toolbar-right{margin-left:auto}.pdf-toolbar-btn{border:0;background:0 0;color:inherit;padding:4px 8px;border-radius:4px;font-size:13px;line-height:1.2;cursor:pointer}.pdf-toolbar-btn:hover:not(:disabled){background-color:rgba(128,128,128,.18)}.pdf-toolbar-btn:disabled{opacity:.4;cursor:default}.pdf-toolbar-zoom{min-width:52px;font-variant-numeric:tabular-nums}.pdf-toolbar-page{width:3.5em;text-align:right;padding:2px 4px;font-size:13px;color:inherit;background:0 0;border:1px solid var(--border-color,rgba(0,0,0,.2));border-radius:4px}.pdf-toolbar-count{font-size:13px;opacity:.75;font-variant-numeric:tabular-nums}.pdf-pages{flex:1 1 auto;min-height:0;overflow:auto;padding:8px 0}.pdf-viewer-page{margin:0 auto 12px}.pdf-viewer-page canvas{display:block;box-shadow:0 1px 4px rgba(0,0,0,.25)}.pdf-viewer-error{padding:24px;text-align:center;font-weight:700}.html-doc{display:block;height:100%}.html-doc-frame{display:block;width:100%;height:100%;border:0;background-color:#fff}.file-error{font-weight:700;font-size:50px;text-align:center}pdfviewer{display:block;padding:15px}pdfpageviewer{display:block;width:100%;margin-bottom:10px}notebook{display:block;text-align:left;padding:15px}@media (min-width:768px){notebook{padding-left:100px}}.nb-output td,.nb-output th{border:1px solid var(--border-color)!important}.paper-faq{max-width:1180px;margin:0 auto;padding:48px 32px 80px;font-family:var(--font-sans)}.paper-faq-hero{padding-bottom:40px;border-bottom:1px solid var(--border-color);margin-bottom:36px}.paper-faq-eyebrow{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;margin-bottom:32px}.paper-faq-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.5vw,4.6rem);line-height:1.03;letter-spacing:-.02em;color:var(--color);margin:0 0 22px;max-width:14em}.paper-faq-title em{font-style:italic;color:var(--color)}.paper-faq-lede{color:var(--ink-soft);font-size:18px;line-height:1.55;max-width:38em;margin:0}.paper-faq-lede a{color:var(--color);border-bottom:1px solid var(--color)}.paper-faq-lede a:hover{color:var(--accent);border-bottom-color:var(--accent)}.paper-faq-body{display:grid;grid-template-columns:220px 1fr;gap:60px;align-items:start}.paper-faq-toc{position:sticky;top:32px;font-size:14px}.paper-faq-toc-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;padding-bottom:10px;margin-bottom:6px;border-bottom:1px solid var(--border-color)}.paper-faq-toc nav{display:flex;flex-direction:column}.paper-faq-toc nav a{color:var(--ink-soft);padding:8px 0 8px 14px;border-left:2px solid transparent;text-decoration:none;margin-left:-2px}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.faq-section{min-width:0}.faq-section>div{width:100%}.faq-section h4.faq-cat{font-family:var(--font-serif);font-weight:400;font-size:clamp(1.7rem,2.6vw,2.2rem);letter-spacing:-.015em;color:var(--color);margin:0 0 6px;padding-bottom:14px;border-bottom:1px solid var(--border-color)}.faq-section h4.faq-cat i{display:none}.faq-section .panel-group{margin-bottom:56px}.faq-section .panel-default .panel-title a{display:block;position:relative;padding:22px 0 22px 42px;font-family:var(--font-serif);font-weight:400;font-size:20px;line-height:1.35;letter-spacing:-.005em;color:var(--color);text-decoration:none;cursor:pointer}.faq-section .panel-default .panel-title a:hover{color:var(--accent)}.faq-section .panel-heading{background:0 0;padding:0!important;border:none}.faq-section .panel-default{background:0 0;border:none;border-bottom:1px solid var(--border-soft);border-radius:0;margin-bottom:0!important;box-shadow:none}.faq-section .panel-default .panel-title{margin-bottom:0}.faq-section .panel-default .panel-title a:after{content:"−";position:absolute;left:0;right:auto;top:22px;transform:none;font-family:var(--font-mono);font-size:18px;line-height:1.35;color:var(--ink-muted);float:none;margin:0;font-weight:400}.faq-section .panel-default .panel-title a.collapsed:after{content:"+"}.faq-section .panel-default .panel-body{padding:0 0 22px 42px!important;color:var(--ink-soft);font-size:15px;line-height:1.65;border-top:none;max-width:42em}.table{color:var(--color)}.dropdown-divider,.table td,.table th,hr{border-color:var(--border-color)}.table.repositories td{word-break:break-word}loc{display:block;position:relative;width:100%;height:5px}loc .lang{float:left;height:100%}.rounded-circle.fa{display:inline-block;font-size:75px;height:140px;width:140px;border:4px solid;line-height:140px;text-align:center}.featurette-divider{margin:4.5rem 0;border-color:var(--border-color)}.featurette-heading{font-family:var(--font-serif);font-weight:400;font-size:2rem;line-height:1.15;letter-spacing:-.02em;margin-bottom:14px;color:var(--color)}.dark-mode .shadow{box-shadow:none}.dark-mode .overflow-auto::-webkit-scrollbar{width:10px}.dark-mode .overflow-auto::-webkit-scrollbar-track{-webkit-box-shadow:none;background:inherit;border-radius:0}.dark-mode .overflow-auto::-webkit-scrollbar-thumb{border-radius:10px;border:1px solid var(--border-color);background-color:var(--hover-bg-color)}.dark-mode .rgba-gradient{background:linear-gradient(135deg,#2a2d4a,#151728)}.section-number{padding-right:10px;font-weight:700;font-style:italic}.org-subscript-child{font-size:85%}.highlighted-line{position:absolute;background:rgba(100,200,100,.5);z-index:20}code,pre{font-family:"Fira Code","Courier New",Courier,monospace;line-height:1.1;color:var(--color)}.diff-file,.diff-index,.diff-lines{background:rgba(172,172,172,.5)}.diff-add{background:rgba(100,200,100,.5)}.diff-remove{background:rgba(200,100,100,.5)}.dashboard-title{font-size:1.375rem;font-weight:600;letter-spacing:-.01em}.quota-row{display:flex;gap:16px;margin-bottom:16px;padding:0}.quota-item{flex:1;min-width:0}.quota-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}.quota-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;opacity:.7}.quota-value{font-size:.8125rem;font-weight:500;font-variant-numeric:tabular-nums}.quota-progress{height:6px;border-radius:3px;background:var(--hover-bg-color)}.quota-progress .progress-bar{border-radius:3px}.filter-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;font-size:.8125rem;font-weight:500;background:var(--primary-bg);color:var(--primary-color);border-radius:12px;line-height:1.4}.filter-chip-close{display:inline-flex;align-items:center;justify-content:center;background:0 0;border:none;color:inherit;opacity:.7;cursor:pointer;padding:0;min-width:24px;min-height:24px;margin:-6px -6px -6px 0;font-size:1rem;line-height:1;border-radius:999px}.filter-chip-close:hover{opacity:1}.repo-list{list-style:none;padding:0;margin:0}.repo-list-item{display:flex;align-items:flex-start;justify-content:space-between;padding:16px 0;border-bottom:1px solid var(--border-color);gap:12px}.repo-list-item:first-child{border-top:1px solid var(--border-color)}.repo-list-item.repo-inactive{opacity:.6}.repo-list-item-content{flex:1;min-width:0}.repo-list-item-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}.repo-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color);word-break:break-word}.repo-name:hover{color:var(--accent)}.repo-source{font-size:.875rem;opacity:.8;display:flex;flex-wrap:wrap;align-items:center;gap:6px}.repo-date{opacity:.7}.repo-meta{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px;font-size:.8125rem;opacity:.7}.repo-meta span{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.repo-list-item-actions{flex-shrink:0;padding-top:2px;margin-left:14px}.repo-list-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:48px 20px;opacity:.5;font-size:.9375rem;list-style:none;border-bottom:1px solid var(--border-color);border-top:1px solid var(--border-color)}.repo-list-empty i{font-size:1.75rem}.type-badge{display:inline-flex;align-items:center;gap:3px;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;padding:2px 8px;border-radius:4px;white-space:nowrap}.type-badge{font-family:var(--font-mono);letter-spacing:.06em;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-bg-alt,transparent)}.type-badge.type-pr,.type-badge.type-repo{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.dark-mode .type-badge.type-pr,.dark-mode .type-badge.type-repo{background:rgba(255,255,255,.06);color:var(--ink-muted);border-color:var(--border-color)}.type-badge.type-coauthor{background:rgba(99,102,241,.12);color:#4f46e5;border-color:rgba(99,102,241,.35);margin-left:6px}.dark-mode .type-badge.type-coauthor{background:rgba(129,140,248,.18);color:#a5b4fc;border-color:rgba(165,180,252,.45)}.btn-group .btn:not(.btn-primary){background:var(--hover-bg-color)}.anonymize-page{display:flex;flex-direction:column;min-height:0}.anonymize-landing{flex:1 1 0;min-height:min-content;display:flex;align-items:center;justify-content:center;padding:20px}.anonymize-landing-inner{width:100%;max-width:600px}.anonymize-landing-inner h2{font-weight:700}.anonymize-workspace{display:flex;flex-direction:column;flex:1 1 0;min-height:0;background:var(--canvas-bg-color)}.anonymize-topbar{background:var(--paper-card);border-bottom:1px solid var(--border-color);padding:18px 28px;flex:0 0 auto}.anonymize-topbar-inner{max-width:1400px;margin:0 auto}.anonymize-topbar-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.anonymize-topbar-title{margin:4px 0 0;font-size:clamp(1.8rem,3vw,2.4rem)}.anonymize-split{flex:1 1 auto;display:flex;min-height:0}.anonymize-form-col{flex:0 0 auto;width:100%;min-width:0;background:var(--canvas-bg-color);border-right:1px solid var(--border-color);overflow-y:auto}.anonymize-form-col .paper-settings-main{max-width:720px;padding:28px 32px 40px;margin:0}.anonymize-form-col .paper-settings-section:first-child{padding-top:0}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;background:var(--canvas-bg-color);padding:14px 0 0;border-top:1px solid var(--border-color);margin-top:20px}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{flex:1 1 auto;min-width:0;overflow:auto;background:var(--paper-bg-alt);padding:28px 32px}.anonymize-preview-head{display:flex;align-items:baseline;gap:12px;padding-bottom:12px;border-bottom:1px solid var(--border-color);margin-bottom:20px}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.anonymize-preview-sub{color:var(--ink-soft);font-size:13px}.anonymize-preview-body{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:28px 32px}.form-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid-3{display:grid;grid-template-columns:2fr 1fr 1fr;gap:16px}@media (max-width:700px){.form-grid-2,.form-grid-3{grid-template-columns:1fr}}.paper-optional{font-family:var(--font-sans);font-weight:400;color:var(--ink-muted);text-transform:none;letter-spacing:0;font-size:11px;margin-left:6px}.paper-plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}.paper-plan-card{position:relative;display:block;padding:18px 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease;margin:0}.paper-plan-card input[type=radio]{position:absolute;opacity:0;pointer-events:none}.paper-plan-card.selected{border-color:var(--color);box-shadow:0 0 0 2px var(--color) inset}.paper-plan-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-plan-price{font-family:var(--font-serif);font-size:2rem;color:var(--color);margin:6px 0 4px}.paper-plan-price .paper-plan-per{font-family:var(--font-sans);font-size:12px;color:var(--ink-soft)}.paper-plan-desc{font-size:13px;color:var(--ink-soft)}.paper-plan-desc ul{padding-left:18px;margin:0}.paper-settings-copy{color:var(--ink-soft);font-size:13px;margin:0 0 14px}.anonymize-section-title{font-size:.875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;margin:18px 0 8px 0;padding-bottom:6px;border-bottom:1px solid var(--border-color);opacity:.7}.anonymize-section-title i{margin-right:4px}.anonymize-submit-bar{padding:12px 0 4px 0}.anonymize-submit-bar .btn{font-size:1rem;padding:10px 20px;font-weight:600}.anonymize-page .form-check{padding-top:4px;padding-bottom:4px}.anonymize-page .form-check-label{font-weight:500}.anonymize-preview-col{min-height:0;min-width:0}.pr-diff pre{overflow-x:auto;max-width:100%}@media (min-width:768px){.anonymize-form-col{height:100%;width:520px;flex:0 0 520px}.anonymize-preview-col{height:100%;flex:1}}@media (max-width:767px){.anonymize-workspace{flex:0 0 auto;min-height:0}.anonymize-topbar{padding:14px 16px}.anonymize-topbar-title{font-size:1.5rem;margin-top:2px}.anonymize-split{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.anonymize-form-col{width:100%!important;flex:0 0 auto!important;height:auto!important;border-right:none;border-bottom:1px solid var(--border-color);overflow:visible}.anonymize-form-col .paper-settings-main{padding:18px 16px 24px;max-width:none}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;margin:20px -16px 0;padding:12px 16px;background:var(--canvas-bg-color);border-top:1px solid var(--border-color);z-index:10}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{width:100%;flex:0 0 auto;height:auto!important;max-height:none;padding:18px 16px 24px;overflow:visible}.anonymize-preview-body{padding:16px;border-radius:8px}.anonymize-preview-body .pr-diff pre,.anonymize-preview-body pre{overflow-x:auto;max-width:100%}.anonymize-landing-inner{padding:16px}}@media (min-width:1280px){.anonymize-form-col{width:620px;flex:0 0 620px}}@media (max-width:767px){.btn{min-height:38px;padding:6px 14px;font-size:14px}.btn-sm{min-height:34px;padding:5px 10px}.navbar .nav-link{padding:8px 12px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:24px;line-height:32px}.container.page{padding-left:15px;padding-right:15px;max-width:100%}h1{font-size:1.5rem}h2{font-size:1.375rem}h3{font-size:1.125rem}.repo-list-item{flex-direction:column}.repo-list-item-actions{align-self:flex-start}.quota-row{flex-direction:column;gap:10px;padding:10px 12px}.dropdown-menu{position:absolute;right:0;left:auto}.form-group{margin-bottom:12px}.form-control{font-size:16px}.status-bar{gap:6px;padding:8px 10px}.status-bar .btn{font-size:12px;padding:4px 10px;min-height:32px}.status-bar .paths{font-size:12px;overflow-x:auto;flex-wrap:nowrap;white-space:nowrap;-webkit-overflow-scrolling:touch}.status-bar .paths::-webkit-scrollbar{display:none}.status-bar-actions{flex-shrink:0;gap:4px}#home .display-4{font-size:1.75rem}#home h4.subtext-header{font-size:1rem}.progress:not(.quota-progress){min-width:120px!important}.badge{font-size:70%}.col-2.input-group{width:100%!important;max-width:100%;flex:0 0 100%}.color-text-secondary span{display:inline-block;margin-bottom:2px}.floatingchat-container-wrap{display:none!important}.anonymize-landing{align-items:flex-start;padding-top:60px}.anonymize-page .container-fluid>.row{height:auto!important;min-height:100%}.anonymize-form-col{width:100%!important;flex:0 0 100%!important;border-right:none;border-top:1px solid var(--border-color)}.anonymize-preview-col{height:auto!important;max-height:none}.anonymize-section-title{font-size:.8125rem;margin:12px 0 8px 0}.anonymize-submit-bar{position:sticky;bottom:0;background:var(--sidebar-bg-color);padding:10px 0;margin:0 -12px;padding-left:12px;padding-right:12px;border-top:1px solid var(--border-color);z-index:10}.anonymize-submit-bar .btn{font-size:1rem;padding:12px 20px}.anonymize-page .form-check{padding-top:6px;padding-bottom:6px;min-height:36px}.anonymize-page .form-check-label{font-size:.9375rem}.anonymize-page .card-body{padding:12px}.pr-title{font-size:1.125rem}.pr-diff pre{font-size:.75rem}.pr-comment .mb-1 h5{font-size:1rem}.nav-tabs .nav-link{padding:8px 12px;font-size:.875rem}}@media (min-width:768px) and (max-width:991px){.container.page{max-width:100%;padding-left:15px;padding-right:15px}.leftCol{flex:0 0 250px;width:250px}}.explorer-page{display:flex;height:100%;width:100%;background:var(--canvas-bg-color);position:relative}.explorer-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;overflow:hidden;background:var(--canvas-bg-color)}.explorer-content{flex:1 1 auto;min-height:0;width:100%;overflow:auto}.leftCol-close,.leftCol-head{display:none}.leftCol-body{flex:1 1 auto;min-height:0;overflow:auto}.leftCol-foot{padding:8px 12px;border-top:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-foot .last-update{display:block;border-top:none;padding:0}.leftCol-backdrop{display:none}.paper-inline-warning{display:flex;align-items:flex-start;gap:8px;margin:8px;padding:10px 12px;background:rgba(138,107,30,.08);border:1px solid rgba(138,107,30,.35);border-radius:8px;color:var(--color);font-size:13px;line-height:1.4}.paper-inline-warning i{color:#8a6b1e;margin-top:2px;flex-shrink:0}.dark-mode .paper-inline-warning i{color:#ffd37a}@media (min-width:768px){.leftCol-body{padding:8px 4px}}.sidebar-toggle{display:none;align-items:center;gap:8px;position:fixed;bottom:18px;right:18px;z-index:1100;padding:10px 14px;background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);border-radius:999px;font-family:var(--font-sans);font-size:13px;font-weight:500;box-shadow:0 6px 20px rgba(0,0,0,.15);cursor:pointer;outline:0}.sidebar-toggle:hover{background:var(--primary-hover-bg)}.sidebar-toggle:focus,.sidebar-toggle:focus-visible{outline:0;box-shadow:0 6px 20px rgba(0,0,0,.15)}@media (max-width:991px){.sidebar-toggle{display:inline-flex}.leftCol{position:fixed;top:0;left:0;bottom:0;width:min(86vw,340px);max-width:340px;z-index:1200;border:none;border-right:1px solid var(--border-color);transform:translateX(0);transition:transform .22s ease;box-shadow:4px 0 24px rgba(0,0,0,.18);background:var(--sidebar-bg-color)}.leftCol.collapsed{transform:translateX(-105%);box-shadow:none;pointer-events:none}.leftCol-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.leftCol-close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;background:0 0;border:1px solid var(--border-color);border-radius:8px;color:var(--ink-muted);cursor:pointer}.leftCol-close:hover{color:var(--color);border-color:var(--color)}.leftCol-foot{display:block}.leftCol-body{padding:4px 0}.leftCol-backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.32);z-index:1150;backdrop-filter:blur(2px)}.dark-mode .leftCol-backdrop{background:rgba(0,0,0,.5)}}.admin-nav{display:flex;gap:4px;padding:4px;margin:8px 0 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;flex-wrap:wrap}.admin-nav a{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:7px;color:var(--ink-muted);text-decoration:none;font-family:var(--font-mono);font-size:12px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;transition:background-color .15s,color .15s;white-space:nowrap}.admin-nav a:hover{background:var(--paper-bg-alt);color:var(--color)}.admin-nav a.active{background:var(--color);color:var(--paper-card)}.admin-nav a i{font-size:12px;width:14px;text-align:center}@media (max-width:767px){.admin-nav{flex-direction:column}.admin-nav a{justify-content:flex-start}}.admin-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:16px}.admin-stat-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:10px 12px}.admin-stat-card .stat-value{font-family:var(--font-serif);font-size:1.375rem;font-weight:400;line-height:1.1;color:var(--color)}.admin-stat-card .stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-top:4px}.admin-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:16px 0 12px}.admin-toolbar .form-control{max-width:320px}@media (max-width:767px){.admin-toolbar .form-control{max-width:100%;width:100%}}.pagination-compact{display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pagination-compact input{width:60px;text-align:center;flex-shrink:0}.pagination-compact .btn{padding:4px 10px;min-height:34px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);flex-shrink:0}.pagination-compact>span{white-space:nowrap}.admin-list-item{display:flex;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--border-color)}.admin-list-item:last-child{border-bottom:none}.admin-list-item .item-main{flex:1;min-width:0}.admin-list-item .item-title{font-size:1rem;font-weight:600;margin-bottom:4px;word-break:break-word}.admin-list-item .item-meta{font-size:.875rem;opacity:.8}.admin-list-item .item-meta span{margin-right:12px;display:inline-block;margin-bottom:2px}.admin-list-item .item-actions{flex-shrink:0}@media (max-width:767px){.admin-list-item{flex-direction:column;gap:8px}.admin-list-item .item-actions{align-self:flex-start}}.status-badge{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.3px;vertical-align:middle}.status-badge{font-family:var(--font-sans);font-weight:500;letter-spacing:.02em;border:1px solid transparent;text-transform:none;font-size:12px;padding:1px 9px 2px;border-radius:999px}.status-badge.status-ready{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.status-badge.status-error{background:#fbe7e7;color:#b42318;border-color:#f3c7c7}.status-badge.status-download,.status-badge.status-preparing{background:#eef0ff;color:#3b4ad6;border-color:#d4d8fa}.status-badge.status-expired,.status-badge.status-expiring,.status-badge.status-removed,.status-badge.status-removing{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.status-badge.status-active{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.queue-job-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 18px;margin-bottom:10px}.queue-job-card .job-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;flex-wrap:wrap;gap:8px}.queue-job-card .job-id{font-family:var(--font-mono);font-size:.9375rem;color:var(--color);word-break:break-all;display:flex;align-items:center;gap:10px}.queue-job-card .job-timestamps{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);display:flex;flex-wrap:wrap;gap:14px}.queue-job-card .job-actions{display:flex;gap:8px;margin-top:10px}.queue-job-card .job-actions .btn{font-size:12px;padding:4px 12px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.admin-section-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--border-color)}.admin-section-header h2{margin:0;font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.admin-section-header h2 i{margin-right:6px;color:var(--ink-muted)}.admin-section-header .section-count{background:var(--paper-bg-alt);color:var(--ink-muted);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;padding:1px 10px;border-radius:999px}.user-detail-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:22px;margin-bottom:24px}.user-detail-card .user-header{display:flex;align-items:center;gap:16px;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--border-color);flex-wrap:wrap}.user-detail-card .user-header img{border-radius:50%}.user-detail-card .user-header h2{margin:0;font-family:var(--font-serif);font-weight:400;font-size:1.5rem;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.user-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;font-size:.9375rem}.user-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.user-detail-grid .detail-value{word-break:break-all;color:var(--color)}@media (max-width:767px){.user-detail-grid{grid-template-columns:1fr}.user-detail-grid .detail-label{margin-top:8px;border-top:1px solid var(--border-color);padding-top:8px}.user-detail-grid .detail-label:first-child{border-top:none;margin-top:0;padding-top:0}}.paper-empty{min-height:calc(100vh - 60px);display:flex;align-items:center;justify-content:center;padding:40px 24px}.paper-empty-inner{max-width:560px;text-align:left}.paper-empty-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.4rem,6vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:18px 0 20px;color:var(--color)}.paper-empty-title em{color:var(--accent);font-style:italic}.paper-empty-lede{font-size:18px;line-height:1.55;color:var(--ink-soft);text-wrap:pretty}.paper-empty-cta{display:flex;gap:10px;margin-top:28px;flex-wrap:wrap}.paper-page{max-width:1100px;margin:0 auto;padding:32px 32px 80px}@media (max-width:991px){.paper-page,.paper-page.container,.paper-page.container-fluid{padding:20px 18px 60px!important}.paper-page .row{margin-left:0;margin-right:0}.paper-page .row>.w-100,.paper-page .row>[class*=col]{padding-left:0;padding-right:0}.navbar.navbar-expand-lg{padding:10px 18px!important}.navbar .navbar-collapse{margin:10px -18px 0;padding:12px 18px 16px;border-top:1px solid var(--border-color);background:var(--header-bg-color)}.navbar .navbar-nav{align-items:stretch!important;gap:2px}.navbar .navbar-nav .nav-item,.navbar .navbar-nav .nav-link{width:100%}.navbar .nav-link{display:flex!important;align-items:center;justify-content:flex-start;margin:0!important;padding:12px 4px!important;border-bottom:1px solid var(--border-color)!important;border-radius:0;font-size:14px;line-height:1.2;gap:0;min-height:44px;box-sizing:border-box}.navbar .nav-link:not(.btn-signin):not(.user-chip){color:var(--color)!important}.navbar .nav-link .fa,.navbar .nav-link .fab,.navbar .nav-link .fas,.navbar .nav-link i{display:inline-flex!important;align-items:center;justify-content:center;width:28px;flex-shrink:0;font-size:16px;line-height:1;margin:0 10px 0 0!important}.navbar .navbar-nav .nav-item:last-child .nav-link,.navbar .navbar-nav>.nav-link:last-child{border-bottom-color:transparent!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--border-color)!important}.navbar .nav-item>.nav-link:not(.btn-signin):not(.user-chip)::before{content:'';display:inline-block;width:28px;margin-right:10px;flex-shrink:0}.navbar .nav-link.nav-icon::before,.navbar .nav-link:has(>i)::before{display:none!important}.navbar .nav-link.nav-icon{width:100%!important;height:auto!important;justify-content:flex-start!important;padding:12px 4px!important}.navbar .nav-link.nav-icon::after{content:attr(title);font-family:var(--font-sans);font-size:14px;color:var(--color)}.navbar .btn-signin{display:inline-flex!important;width:auto!important;align-self:flex-start;justify-content:center;height:40px;padding:0 18px!important;margin:14px 0 0!important;border-radius:8px;border-bottom:none!important}.navbar .btn-signin i{margin:0 8px 0 0!important;width:auto!important}.navbar .user-chip-wrap{width:100%}.navbar .user-chip{display:flex!important;width:100%;margin:0!important;padding:10px 4px!important;background:0 0!important;border:none!important;border-bottom:1px solid var(--border-color)!important;border-radius:0!important;justify-content:flex-start;gap:0;min-height:44px}.navbar .user-chip::before{display:none!important}.navbar .user-chip img{width:28px!important;height:28px!important;margin-right:10px!important;flex-shrink:0}.navbar .user-chip .user-chip-name{font-size:14px;font-weight:500;color:var(--color)!important}.navbar .user-chip.dropdown-toggle::after{margin-left:auto;color:var(--ink-muted)}.navbar .user-chip-wrap .dropdown-menu{position:static!important;float:none;width:100%;margin:0!important;padding:0!important;background:0 0!important;border:none!important;box-shadow:none!important;transform:none!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item{padding:10px 4px 10px 42px!important;font-size:14px;color:var(--ink-muted)!important;background:0 0!important;border-bottom:1px solid var(--border-color);text-align:left!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item:last-child{border-bottom:none}.navbar .user-chip-wrap .dropdown-divider{display:none}.navbar-brand{border-right:none!important;padding-right:0!important;margin-right:0!important}.dark-mode .navbar .navbar-collapse{background:var(--header-bg-color);border-top-color:var(--border-color)}.dark-mode .navbar .nav-link{border-bottom-color:var(--border-color)!important}.dark-mode .navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}}.status-pill{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;background:var(--paper-bg-alt);border:1px solid var(--border-color);color:var(--ink-soft);font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase}.paper-progress{position:relative;height:auto;background:0 0;margin:18px 0 8px}.paper-progress::before{content:"";display:block;height:8px;background:var(--paper-bg-alt);border-radius:999px}.paper-progress .paper-progress-bar{position:absolute;top:0;left:0;height:8px;background:var(--color);border-radius:999px;transition:width .4s ease;min-width:4px}.paper-progress .paper-progress-label{display:flex;justify-content:space-between;align-items:center;margin-top:10px;font-family:var(--font-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted)}.paper-progress .paper-progress-pct{color:var(--color)}.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--color)}.paper-error-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #c53030;border-radius:10px;color:var(--color)}.dark-mode .paper-error-card{border-left-color:#ff8b7b}.paper-ratelimit-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #d69e2e;border-radius:10px;color:var(--color)}.dark-mode .paper-ratelimit-card{border-left-color:#f6e05e}.paper-ratelimit-head{display:flex;align-items:flex-start;gap:14px}.paper-ratelimit-head>i{font-size:18px;color:#d69e2e;margin-top:4px;flex-shrink:0}.dark-mode .paper-ratelimit-head>i{color:#f6e05e}.paper-ratelimit-card strong{color:var(--color)}.status-pill-ratelimit{border-color:#d69e2e;color:#d69e2e}.dark-mode .status-pill-ratelimit{border-color:#f6e05e;color:#f6e05e}.status-ratelimit{background:#d69e2e}.dark-mode .status-ratelimit{background:#f6e05e}.paper-error-head{display:flex;align-items:flex-start;gap:14px}.paper-error-head>i{font-size:18px;color:#c53030;margin-top:4px;flex-shrink:0}.dark-mode .paper-error-head>i{color:#ff8b7b}.paper-error-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-error-title{font-family:var(--font-serif);font-size:1.375rem;line-height:1.2;margin-top:2px;color:var(--color)}.paper-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft);font-family:var(--font-mono);word-break:break-word;white-space:pre-wrap}.paper-error-hints{margin:14px 0 0;padding-left:18px;color:var(--ink-soft);font-size:14px;line-height:1.6}.paper-error-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}.paper-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;margin-top:18px;font-size:.9375rem}.paper-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.paper-detail-grid .detail-value{word-break:break-all;color:var(--color)}.paper-detail-grid .detail-value a{color:var(--color);border-bottom:1px solid var(--border-color)}.paper-detail-grid .detail-value a:hover{border-bottom-color:var(--color)}@media (max-width:700px){.paper-detail-grid{grid-template-columns:1fr;gap:4px 0}.paper-detail-grid .detail-label{padding-top:8px}}.paper-support-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin:18px 0 28px}.paper-support-card{display:flex;flex-direction:column;gap:10px;padding:20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;color:var(--color);text-decoration:none;transition:border-color .15s ease,transform .15s ease}.paper-support-card:hover{border-color:var(--color);text-decoration:none;color:var(--color)}.paper-support-card .paper-support-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);display:flex;align-items:center;gap:8px}.paper-support-card p{margin:0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.paper-support-card .paper-support-cta{margin-top:auto;font-size:13px;font-weight:500;color:var(--color);display:inline-flex;align-items:center;gap:6px}.paper-support-card:hover .paper-support-cta i{transform:translateX(2px)}.paper-support-card .paper-support-cta i{transition:transform .15s ease}.pr-page{min-height:100%;background:var(--canvas-bg-color)}.pr-page-inner{padding-top:24px;padding-bottom:60px}.pr-header{margin:6px 0 18px}.pr-title{margin:4px 0 10px;font-size:clamp(1.6rem,3vw,2.4rem);line-height:1.15;word-break:break-word}.pr-header-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pr-header-meta .pr-meta-item{display:inline-flex;align-items:center;gap:6px}.pr-header-meta .pr-meta-item i{color:var(--ink-muted)}.pr-body-card{margin:18px 0 24px;padding:20px 22px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-body-card .paper-section-eyebrow{margin-bottom:12px}.paper-tabs{display:flex;flex-wrap:wrap;gap:0;border-bottom:1px solid var(--border-color);margin:18px 0 0}.paper-tabs .paper-tab{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;background:0 0;border:0;border-bottom:2px solid transparent;font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--ink-muted);cursor:pointer;transition:color .15s ease,border-color .15s ease;margin-bottom:-1px}.paper-tabs .paper-tab:hover{color:var(--color)}.paper-tabs .paper-tab.active{color:var(--color);border-bottom-color:var(--color)}.paper-tabs .paper-tab i{color:inherit;opacity:.85}.paper-tabs .paper-tab:active,.paper-tabs .paper-tab:focus,.paper-tabs .paper-tab:focus-visible{outline:0;box-shadow:none}.paper-tabs .paper-tab:focus-visible{color:var(--color);background:var(--hover-bg-color);border-radius:6px 6px 0 0}.pr-diff{margin:16px 0 28px;display:flex;flex-direction:column;gap:16px}.diff-file-block{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;overflow:hidden}.diff-file-header{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--paper-bg-alt);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:13px;color:var(--color)}.diff-file-icon{color:var(--ink-muted);flex-shrink:0}.diff-file-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:break-all}.diff-file-status{flex-shrink:0;padding:2px 8px;border-radius:999px;font-size:10px;letter-spacing:.12em;text-transform:uppercase;border:1px solid var(--border-color);color:var(--ink-muted);background:var(--paper-card)}.diff-file-status-added{color:#2f6b3e;border-color:rgba(47,107,62,.35);background:rgba(47,107,62,.08)}.diff-file-status-deleted{color:#a13a2e;border-color:rgba(161,58,46,.35);background:rgba(161,58,46,.08)}.diff-file-status-renamed{color:#8a6b1e;border-color:rgba(138,107,30,.35);background:rgba(138,107,30,.08)}.dark-mode .diff-file-status-added{color:#a7e2a7;border-color:rgba(167,226,167,.35);background:rgba(167,226,167,.08)}.dark-mode .diff-file-status-deleted{color:#ff8b7b;border-color:rgba(255,139,123,.35);background:rgba(255,139,123,.08)}.dark-mode .diff-file-status-renamed{color:#ffd37a;border-color:rgba(255,211,122,.35);background:rgba(255,211,122,.08)}.diff-file-table{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-size:13px;line-height:1.55;table-layout:fixed}.diff-file-table tr.diff-row{vertical-align:top}.diff-file-table .diff-gutter{width:48px;padding:0 10px;text-align:right;color:var(--ink-muted);background:var(--paper-bg-alt);border-right:1px solid var(--border-color);user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;white-space:nowrap}.diff-file-table .diff-gutter-new{border-right:1px solid var(--border-color)}.diff-file-table .diff-sign{width:18px;padding:0 6px;text-align:center;color:var(--ink-muted);background:var(--paper-bg-alt);user-select:none;vertical-align:top}.diff-file-table .diff-code{padding:1px 12px;white-space:pre-wrap;word-break:break-word;color:var(--color)}.diff-row-hunk td{background:var(--paper-bg-alt)!important;color:var(--ink-muted);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-size:12px;letter-spacing:.02em;padding-top:6px;padding-bottom:6px}.diff-row-hunk .diff-code{color:var(--ink-muted)}.diff-row-add .diff-code{background:rgba(47,107,62,.1);color:#1f4a2a}.diff-row-add .diff-gutter,.diff-row-add .diff-sign{background:rgba(47,107,62,.06);color:#2f6b3e}.diff-row-remove .diff-code{background:rgba(161,58,46,.1);color:#6e1f1a}.diff-row-remove .diff-gutter,.diff-row-remove .diff-sign{background:rgba(161,58,46,.06);color:#a13a2e}.dark-mode .diff-row-add .diff-code{background:rgba(167,226,167,.1);color:#c9f0c9}.dark-mode .diff-row-add .diff-gutter,.dark-mode .diff-row-add .diff-sign{background:rgba(167,226,167,.06);color:#a7e2a7}.dark-mode .diff-row-remove .diff-code{background:rgba(255,139,123,.1);color:#ffc9c0}.dark-mode .diff-row-remove .diff-gutter,.dark-mode .diff-row-remove .diff-sign{background:rgba(255,139,123,.06);color:#ff8b7b}@media (max-width:700px){.diff-file-table{font-size:12px}.diff-file-table .diff-gutter{width:36px;padding:0 6px}.diff-file-table .diff-sign{width:14px;padding:0 4px}.diff-file-table .diff-code{padding:1px 8px}}.pr-comments{list-style:none;margin:16px 0 28px;padding:0;display:flex;flex-direction:column;gap:12px}.pr-comment{padding:16px 18px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-comment-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;padding-bottom:8px;margin-bottom:8px;border-bottom:1px solid var(--border-color)}.pr-comment-author{font-weight:600;color:var(--color);font-size:14px;display:inline-flex;align-items:center;gap:6px}.pr-comment-author i{color:var(--ink-muted);font-size:12px}.pr-comment-date{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.pr-comment-body{color:var(--color);font-size:14px;line-height:1.6}.pr-comment-body :last-child{margin-bottom:0}@media (max-width:700px){.pr-page-inner{padding-top:14px;padding-bottom:40px}.pr-body-card{padding:14px 14px;border-radius:8px}.pr-comment{padding:12px 14px}.paper-tabs .paper-tab{padding:10px 12px;font-size:13px}.pr-diff pre{font-size:12px;padding:12px}}.toast{background-color:var(--paper-card)!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:10px!important;box-shadow:0 8px 24px rgba(0,0,0,.08);backdrop-filter:none;min-width:280px;max-width:calc(100vw - 24px)}.toast .toast-header{background:0 0!important;color:var(--color)!important;border-bottom:1px solid var(--border-color)!important;font-family:var(--font-sans);padding:10px 12px}.toast .toast-header strong{font-weight:600;color:var(--color);letter-spacing:.01em}.toast .toast-header .close{color:var(--ink-muted)!important;text-shadow:none;opacity:.9;font-size:1.25rem}.toast .toast-header .close:hover{color:var(--color)!important;opacity:1}.toast .toast-body{color:var(--color)!important;padding:12px;font-size:14px;line-height:1.45}.dark-mode .toast{box-shadow:0 8px 24px rgba(0,0,0,.5)}.paper-crumbs{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);letter-spacing:0}.paper-crumbs .here,.paper-crumbs a{color:var(--color);text-decoration:none}.paper-page-title{font-family:var(--font-sans);font-weight:600;font-size:32px;line-height:1.2;letter-spacing:-.035em;margin:8px 0 6px;color:var(--color)}.paper-page-title em{color:inherit;font-style:normal}.paper-page-lede{color:var(--ink-soft);font-size:16px;max-width:640px;line-height:1.55}.paper-meta-rule{display:flex;flex-wrap:wrap;gap:16px 24px;align-items:center;margin:22px 0 18px;padding:12px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paper-meta-rule b{color:var(--color);font-weight:500}.paper-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:10px;padding:20px 22px}.dark-mode .paper-card{background:var(--admin-stat-bg)}.paper-section-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500;margin-bottom:10px;display:block}.paper-section-title{font-family:var(--font-serif);font-weight:400;font-size:22px;letter-spacing:-.01em;margin:0 0 8px}.paper-kbd{display:inline-block;font-family:var(--font-mono);font-size:11px;padding:1px 6px;border:1px solid var(--border-color);border-bottom-width:2px;border-radius:3px;background:var(--paper-card,#fff);color:var(--color)}.paper-pill{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;padding:2px 8px;border:1px solid var(--border-color);border-radius:999px;color:var(--ink-soft);background:var(--paper-card,#fff);letter-spacing:.04em}.paper-pill.accent{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.paper-pill.good{border-color:#2f6b3e;color:#2f6b3e}.paper-pill.warn{border-color:#8a6b1e;color:#8a6b1e}.paper-pill.bad{border-color:#a13a2e;color:#a13a2e}.paper-row{display:grid;grid-template-columns:1fr auto;gap:16px;align-items:start;padding:18px 0;border-bottom:1px solid var(--border-color)}.paper-row:first-child{border-top:1px solid var(--border-color)}.paper-row .row-title{font-family:var(--font-serif);font-size:20px;letter-spacing:-.01em;line-height:1.2}.paper-row .row-title a{color:var(--color)}.paper-row .row-meta{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.03em;margin-top:6px;display:flex;flex-wrap:wrap;gap:14px}.paper-row .row-actions{display:flex;gap:6px;flex-shrink:0}.paper-form-step{display:grid;grid-template-columns:48px 1fr;gap:20px;padding:22px 0;border-bottom:1px solid var(--border-color)}.paper-form-step:first-child{border-top:1px solid var(--border-color)}.paper-form-step .step-num{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);padding-top:4px;letter-spacing:.02em}.paper-form-step .step-title{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;line-height:1.2;margin-bottom:4px}.paper-form-step .step-sub{color:var(--ink-soft);font-size:14px;margin-bottom:14px;text-wrap:pretty}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.paper-switch-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;gap:16px}.paper-switch-row+.paper-switch-row{border-top:1px dashed var(--border-soft)}.paper-switch-row .sw-label{font-weight:500}.paper-switch-row .sw-sub{display:block;font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-page .custom-select,.paper-page .form-control{border-radius:6px;border-color:var(--border-color);font-size:14px;padding:8px 12px;height:auto;background:var(--input-bg);color:var(--input-color)}.paper-page .custom-select:focus,.paper-page .form-control:focus{color:var(--input-color);background:var(--input-bg);border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.custom-select:focus,.form-control:focus,input:focus,select:focus,textarea:focus{color:var(--input-color)!important;background-color:var(--input-bg)!important}.form-control::selection,input::selection,textarea::selection{background:var(--accent-soft);color:var(--input-color)}.dark-mode .form-control::selection,.dark-mode input::selection,.dark-mode textarea::selection{background:rgba(167,178,255,.3);color:var(--input-color)}.btn.btn-ink{background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);font-weight:500;border-radius:6px;padding:8px 14px}.btn.btn-ink:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color);border-color:var(--primary-hover-bg)}.btn.btn-accent{background:var(--accent);color:#fff;border:1px solid var(--accent);font-weight:500;border-radius:6px}.btn.btn-accent:hover{background:#2e3bb8;border-color:#2e3bb8;color:#fff}.paper-page .dashboard-filter-row{display:flex;align-items:center;gap:10px;padding:14px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);margin:18px 0 0;flex-wrap:wrap}.paper-page .dashboard-filter-row .form-control{height:38px;background:var(--paper-card)}.paper-page .dashboard-filter-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.paper-page .dashboard-filter-row .btn-group .btn,.paper-page .dashboard-filter-row .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);height:38px;padding:0 14px;font-size:14px;font-weight:500;border-radius:var(--radius-control,6px);display:inline-flex;align-items:center;gap:6px;line-height:1}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label{color:var(--ink-muted);font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label::after{content:"·";margin-left:6px;color:var(--ink-faint)}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-value{font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .fas{font-size:11px;color:var(--ink-muted)}.paper-page .dashboard-filter-row .btn-group .btn:hover,.paper-page .dashboard-filter-row .dropdown-toggle:hover{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.paper-page .dashboard-filter-row .btn-group{gap:0}.paper-page .dashboard-filter-row .btn-group .btn{border-radius:0;border-right-width:0}.paper-page .dashboard-filter-row .btn-group .btn:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.paper-page .dashboard-filter-row .btn-group .btn:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px;border-right-width:1px}.paper-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--color);color:var(--canvas-bg-color);border-color:var(--color)}.paper-page .dashboard-filter-row .search-wrap{flex:1 1 280px;min-width:220px}.paper-page .quota-row{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;margin:24px 0 0;padding:0;background:0 0;border:none;border-radius:0}.paper-page .quota-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);opacity:1}.paper-page .quota-value{font-family:var(--font-mono);font-size:13px;font-variant-numeric:tabular-nums;color:var(--color)}.paper-page .quota-value .quota-unlimited-tag{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);margin-left:4px}.paper-page .quota-track{height:6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;width:100%;min-width:0}.paper-page .quota-track .quota-fill{height:100%;min-width:2px;border-radius:999px;background:var(--color);transition:width .3s ease}.paper-page .quota-track.quota-warn .quota-fill{background:var(--status-progress)}.paper-page .quota-track.quota-danger .quota-fill{background:var(--status-error)}.paper-page .quota-track.quota-unlimited{background:repeating-linear-gradient(-45deg,var(--paper-bg-alt) 0 4px,var(--border-soft,var(--border-color)) 4px 6px)}.paper-page .repo-list{margin-top:8px}.paper-page .repo-list-item{padding:20px 0;gap:16px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-page .repo-list-item:first-child{border-top:none}.paper-page .repo-list-item-header{gap:10px;margin-bottom:6px}.paper-page .repo-name{font-family:var(--font-mono);font-size:15px;color:var(--color)}.paper-page .repo-source{font-size:13px;color:var(--ink-soft);opacity:1;gap:10px}.paper-page .repo-source a{color:var(--ink-soft);border-bottom:1px dotted var(--border-color)}.paper-page .repo-source a:hover{color:var(--color)}.paper-page .repo-meta{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);opacity:1;gap:16px;margin-top:10px}.paper-page .type-badge{font-family:var(--font-mono);font-size:11px;padding:3px 8px;letter-spacing:.1em}.paper-page .repo-list-item-actions .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;font-size:13px;padding:6px 12px;height:auto}.paper-settings{max-width:1180px;margin:0 auto;padding:48px 32px 80px}.paper-settings .paper-page-title{max-width:14em}.paper-settings-body{display:grid;grid-template-columns:220px 1fr;gap:60px;margin-top:32px;border-top:1px solid var(--border-color);padding-top:28px}.paper-settings-toc{position:sticky;top:32px;align-self:start}.paper-settings-toc-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:12px}.paper-settings-toc nav{display:flex;flex-direction:column;gap:2px}.paper-settings-toc nav a{padding:8px 0 8px 14px;border-left:2px solid transparent;color:var(--ink-soft);font-size:14px;text-decoration:none}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.paper-settings-main{min-width:0;max-width:720px}.paper-settings-section{padding:28px 0;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section:first-child{padding-top:0}.paper-settings-section:last-of-type{border-bottom:none}.paper-settings-section .form-group{margin-bottom:18px}.paper-settings-section .form-check{padding:10px 0 10px 28px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section .form-check:last-child{border-bottom:none}.paper-settings-section .form-check-label{font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--color);cursor:pointer}.paper-settings-section .form-check-input{cursor:pointer;width:16px;height:16px;margin-top:3px;margin-left:-28px;accent-color:var(--color)}.paper-settings-section .form-text{color:var(--ink-soft);font-size:13px;margin-top:4px;max-width:48em}.paper-settings-section .paper-section-copy{margin:-4px 0 14px}.paper-settings-footer{padding-top:24px;display:flex;flex-direction:column;gap:14px}.paper-settings-footer .btn-ink{align-self:flex-start}.paper-settings-actions{display:flex;align-items:center;flex-wrap:wrap;gap:14px}.paper-settings-hint{font-size:13px;color:var(--ink-muted)}.paper-inline-alert{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:var(--radius-control,6px);border:1px solid var(--border-color);background:var(--paper-bg-alt);font-size:13px;color:var(--color)}.paper-inline-alert i{margin-top:2px;color:var(--ink-muted)}.paper-inline-alert-error{border-color:var(--status-error);background:var(--status-error-soft)}.paper-inline-alert-error i{color:var(--status-error)}.paper-account-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);background:var(--paper-card);margin-bottom:20px}.paper-account-card img{flex-shrink:0}.paper-account-identity{flex:1 1 auto;min-width:0}.paper-account-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color)}.paper-account-meta{font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-danger-zone{padding:16px;border:1px solid var(--status-error);border-radius:var(--radius-surface,10px);background:var(--status-error-soft)}.paper-danger-head{font-weight:600;font-size:14px;color:var(--status-error);margin-bottom:6px}.paper-danger-copy{font-size:13px;color:var(--ink-soft);max-width:52em;margin-bottom:12px}.paper-danger-zone .paper-inline-alert{margin-bottom:12px}.btn.btn-outline-danger{background:0 0;color:var(--status-error);border:1px solid var(--status-error);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-danger:hover{background:var(--status-error);color:#fff;border-color:var(--status-error)}.navbar .user-menu{min-width:260px}.navbar .user-menu .dropdown-item{display:flex;align-items:flex-start;gap:10px;padding:8px 10px!important}.navbar .user-menu .dropdown-item i{width:16px;margin-top:3px;font-size:13px;color:var(--ink-muted);text-align:center}.navbar .user-menu .dropdown-item span{display:flex;flex-direction:column;line-height:1.3}.navbar .user-menu .dropdown-item small{font-size:12px;color:var(--ink-muted)}.navbar .user-menu .dropdown-header{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:24px}.paper-settings-toc{position:static}.paper-settings-toc nav{flex-direction:row;flex-wrap:wrap;gap:8px}.paper-settings-toc nav a{border-left:none;border-bottom:2px solid transparent;padding:4px 0}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--color);border-left:none}}.paper-table{display:block;margin-top:20px;background:0 0;border:none;border-top:1px solid var(--border-color);border-radius:0;overflow:visible}.paper-table .paper-table-head,.paper-table .paper-table-row{display:grid;grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 140px 90px 140px 52px;align-items:center;gap:18px;padding:12px 4px}.paper-table.paper-table-conferences .paper-table-head,.paper-table.paper-table-conferences .paper-table-row{grid-template-columns:minmax(280px,2.4fr) 140px 90px 220px 52px}.paper-table.paper-table-repos .paper-table-head,.paper-table.paper-table-repos .paper-table-row{grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px}.paper-table.paper-table-repos.has-bulk .paper-table-head,.paper-table.paper-table-repos.has-bulk .paper-table-row{grid-template-columns:28px minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px;gap:12px}.paper-table .admin-users-row{grid-template-columns:28px minmax(280px,2.4fr) 90px 120px 100px 52px!important;gap:12px!important}.paper-table.paper-table-dashboard .paper-table-head,.paper-table.paper-table-dashboard .paper-table-row{grid-template-columns:minmax(320px,3fr) 190px 90px 170px 52px;gap:20px;padding:8px 4px}.paper-table.paper-table-dashboard .cell-anon .anon-text{gap:2px}.paper-table.paper-table-dashboard .cell-anon .repo-name{padding:0}.paper-table .paper-table-head{background:0 0;border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-muted);padding-top:8px;padding-bottom:8px}.paper-table .paper-table-head .sortable{cursor:pointer;user-select:none;display:inline-flex;align-items:center;gap:6px;background:0 0;border:none;padding:2px 0;margin:0;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit;border-radius:4px}.paper-table .paper-table-head .sortable:hover{color:var(--color)}.paper-table .paper-table-head .sortable.active{color:var(--color)}.paper-table .paper-table-head .sortable i{font-size:10px}.paper-table .paper-table-head .num,.paper-table .paper-table-row .num{text-align:right}.paper-table .paper-table-head .num .sortable{flex-direction:row-reverse}.paper-table .paper-table-row{border-top:1px solid var(--border-soft,var(--border-color));font-size:14px;transition:background-color .12s ease}.paper-table .paper-table-row:hover{background:var(--hover-bg-color)}.paper-table .paper-table-row.row-clickable{cursor:pointer}.paper-table .paper-table-row.repo-inactive>:not(.cell-actions){opacity:.55}.paper-table .paper-table-row.repo-error{background:var(--status-error-soft);border-left:2px solid var(--status-error);padding-left:6px}.paper-table .paper-table-row.repo-error:hover{background:var(--status-error-soft-hover)}.cell-status .status-sub.status-sub-error,.paper-table .cell-status .status-sub-error{color:var(--status-error)}.paper-table .cell-status .status-sub-warn{color:var(--status-progress)}.paper-table .cell-anon{display:flex;align-items:center;gap:12px;min-width:0}.paper-table .cell-anon .type-badge{flex-shrink:0;min-width:52px;justify-content:center}.paper-table .cell-anon .anon-text{min-width:0;display:flex;flex-direction:column;gap:3px}.paper-table .cell-anon .anon-title{display:flex;align-items:center;gap:8px;min-width:0}.paper-table .cell-anon .anon-title .type-badge{margin-left:0}.paper-table .cell-anon .repo-name{font-family:var(--font-mono);font-size:14px;color:var(--color);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:100%;padding:2px 0}.paper-table .cell-anon .repo-name-static{color:var(--ink-muted);font-style:italic}.paper-table .cell-anon .anon-sub{font-family:var(--font-sans);font-size:13px;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:10px;min-width:0}.paper-table .cell-anon .anon-sub .anon-source{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-anon .anon-sub .conf-tag{flex:0 1 auto;min-width:72px;max-width:50%}.paper-table .cell-anon .anon-sub a{color:var(--ink-muted);border-bottom:1px dotted var(--border-color);padding:4px 0;margin:-4px 0}.paper-table .cell-anon .anon-sub a:hover{color:var(--color)}.paper-table .cell-anon .anon-sub .commit-hash{font-family:var(--font-mono);font-size:12px}.paper-table .cell-conf{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-conf span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-status{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;font-size:14px;color:var(--color);min-width:0}.paper-table .cell-status .status-line{display:inline-flex;align-items:center;gap:8px}.paper-table .cell-status .status-sub{flex-basis:100%;font-family:var(--font-sans);font-size:13px;line-height:1.3;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.paper-table .cell-expires{font-family:var(--font-sans);font-size:13px;color:var(--ink-soft)}.paper-table .cell-expires .expires-never{color:var(--ink-muted)}.paper-table .cell-expires .expires-past{color:var(--ink-muted)}.paper-table .empty-dash{color:var(--ink-faint)}.paper-table .cell-actions{display:flex;justify-content:flex-end}.status-dot{width:8px;height:8px;border-radius:999px;display:inline-block;flex-shrink:0;background:var(--status-inactive)}.status-dot.status-ready{background:var(--status-ready)}.status-dot.status-error{background:var(--status-error)}.status-dot.status-preparing,.status-dot.status-progress{background:var(--status-progress)}.status-dot.status-expired,.status-dot.status-removed{background:var(--status-inactive)}.dashboard-page{padding-bottom:96px}.dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin-top:12px;font-size:13px;color:var(--ink-muted)}.dashboard-meta .dashboard-count{font-variant-numeric:tabular-nums}.btn-link-inline{background:0 0;border:none;padding:2px 4px;margin:-2px 0;font:inherit;color:var(--link-color);cursor:pointer;border-radius:4px}.btn-link-inline:hover{color:var(--link-hover-color);text-decoration:underline}.btn.btn-outline-ink{background:0 0;color:var(--color);border:1px solid var(--border-color);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-ink:hover{background:var(--hover-bg-color);color:var(--color);border-color:var(--ink-faint)}.paper-page .dropdown-menu .dropdown-item-danger,.paper-page .dropdown-menu .dropdown-item-danger i{color:var(--status-error)}.paper-page .dropdown-menu .dropdown-item-danger:focus,.paper-page .dropdown-menu .dropdown-item-danger:hover{background:var(--status-error-soft-hover);color:var(--status-error)}.paper-page .dropdown-menu button.dropdown-item{width:100%;text-align:left;background:0 0;border:none}.paper-page .dropdown-menu .dropdown-divider{border-top-color:var(--border-soft,var(--border-color));margin:4px 0}.paper-table .paper-table-skeleton{pointer-events:none}.skeleton{display:block;background:var(--paper-bg-alt);border-radius:4px;position:relative;overflow:hidden}.skeleton::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,var(--hover-bg-color),transparent);animation:skeleton-shimmer 1.4s infinite}.skeleton-line{height:12px}.skeleton-line+.skeleton-line{margin-top:8px}.skeleton-line-sm{height:10px}.skeleton-badge{width:52px;height:22px;border-radius:999px;flex-shrink:0}@keyframes skeleton-shimmer{to{transform:translateX(100%)}}@media (prefers-reduced-motion:reduce){.skeleton::after{animation:none}}.paper-table .paper-table-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:56px 20px;color:var(--ink-muted);text-align:center;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table .paper-table-empty>i{font-size:1.5rem;color:var(--ink-faint)}.paper-table .paper-table-empty-actions{display:flex;gap:8px;margin-top:8px}.bulk-bar{display:flex;align-items:center;gap:8px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:8px 12px;margin:8px 0}.paper-page.admin-page .paper-page-title{font-size:1.5rem;margin:4px 0}.paper-page.admin-page .paper-page-lede{display:none}.paper-page.admin-page .paper-crumbs{margin-bottom:4px}.paper-page.admin-page .admin-nav{margin:6px 0 12px}.admin-filter-toolbar{display:flex;flex-direction:column;gap:6px;margin:8px 0 12px;position:sticky;top:0;z-index:4;background:var(--canvas-bg-color);padding:6px 0;border-bottom:1px solid var(--border-soft,var(--border-color));box-shadow:0 1px 0 var(--canvas-bg-color)}@media (max-width:900px){.admin-filter-toolbar{position:static;box-shadow:none}}.admin-filter-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.admin-filter-row .search-wrap{flex:1;min-width:220px}.admin-filter-row .search-wrap .form-control{height:34px}.admin-filter-inline{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.admin-filter-inline>label{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);margin:0;white-space:nowrap}.admin-filter-inline .form-control-sm{height:28px;padding:2px 8px;font-size:12px}.admin-filter-inline input[type=search].form-control-sm,.admin-filter-inline input[type=text].form-control-sm{width:130px}.admin-filter-inline input[type=date].form-control-sm{width:130px}.admin-filter-inline select.form-control-sm{width:auto;min-width:88px}.admin-filter-inline .arrow{color:var(--ink-muted);font-size:11px}.admin-filter-spacer{flex:1}.admin-active-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px;color:var(--ink-muted)}.admin-active-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 4px 2px 10px;border:1px solid var(--border-color);border-radius:999px;background:var(--hover-bg-color);font-size:12px;color:var(--color)}.admin-active-chip .key{color:var(--ink-muted);font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em}.admin-active-chip button{background:0 0;border:none;cursor:pointer;padding:0 4px;color:var(--ink-muted);font-size:12px;border-radius:50%}.admin-active-chip button:hover{color:#b42318}.admin-search-hint{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);pointer-events:none;border:1px solid var(--border-color);border-radius:4px;padding:1px 5px;background:var(--paper-card)}.admin-filter-row .search-wrap{position:relative}.admin-filter-row .search-wrap .form-control{padding-right:40px}.paper-table-row.row-selected{background:rgba(47,122,68,.06)}.queue-state-pills{display:inline-flex;gap:6px;margin-left:8px;flex-wrap:wrap}.queue-state-pills .pill{font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted)}.queue-state-pills .pill-active{color:#c48a2e;border-color:rgba(196,138,46,.4)}.queue-state-pills .pill-failed{color:#b42318;border-color:rgba(180,35,24,.4)}.queue-state-pills .pill-completed{color:#2f7a44;border-color:rgba(47,122,68,.3)}.queue-state-pills .pill-waiting{color:var(--ink-soft)}.queue-state-pills .pill-delayed{color:var(--ink-muted)}.admin-summary{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0 12px;font-size:13px}.admin-summary .summary-total{font-family:var(--font-serif);font-size:1rem;color:var(--color);margin-right:8px}.admin-summary .summary-meta{color:var(--ink-muted);font-size:12px;margin-right:8px}.admin-summary .summary-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);cursor:pointer;font-size:12px;user-select:none;transition:background-color .1s,border-color .1s}.admin-summary .summary-pill:hover{background:var(--hover-bg-color)}.admin-summary .summary-pill .count{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.admin-summary .summary-pill.active{background:var(--primary-bg);color:var(--primary-color);border-color:var(--primary-bg)}.admin-summary .summary-pill.active .count{color:inherit}.admin-summary .summary-pill.error .count{color:#b42318}.admin-summary .summary-pill.warn .count{color:#c48a2e}.admin-summary .summary-pill.ok .count{color:#2f7a44}.dark-mode .admin-summary .summary-pill.error .count{color:#f08a82}.dark-mode .admin-summary .summary-pill.warn .count{color:#e8b970}.dark-mode .admin-summary .summary-pill.ok .count{color:#7dc894}.dark-mode .queue-state-pills .pill-active{color:#e8b970;border-color:rgba(232,185,112,.4)}.dark-mode .queue-state-pills .pill-failed{color:#f08a82;border-color:rgba(240,138,130,.4)}.dark-mode .queue-state-pills .pill-completed{color:#7dc894;border-color:rgba(125,200,148,.3)}.job-progress{flex:1;height:6px;background:var(--border-soft,var(--border-color));border-radius:999px;overflow:hidden;margin-left:12px;max-width:200px}.job-progress-bar{height:100%;background:#2f7a44;transition:width .3s}.paper-table-empty{padding:48px 4px;text-align:center;color:var(--ink-muted);display:flex;flex-direction:column;align-items:center;gap:8px;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table-empty>i{font-size:1.5rem}.q-header{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:4px}.q-header-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.q-range-btns{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden}.q-range-btns .btn{border:none;border-radius:0;padding:5px 14px;font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);background:var(--paper-card)}.q-range-btns .btn+.btn{border-left:1px solid var(--border-color)}.q-range-btns .btn.active{background:var(--color);color:var(--paper-card)}.q-cards{display:flex;gap:10px;margin:16px 0;flex-wrap:wrap}.q-card{flex:1;min-width:140px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:14px 16px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.q-card:hover{border-color:var(--ink-muted)}.q-card.selected{border-color:var(--color);box-shadow:0 0 0 1px var(--color)}.q-card-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.q-dot{width:8px;height:8px;border-radius:50%;background:#2f7a44;flex-shrink:0}.q-dot-red{background:#b42318}.dark-mode .q-dot{background:#7dc894}.dark-mode .q-dot-red{background:#f08a82}.q-card-name{font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--ink-muted);letter-spacing:.04em}.q-card-count{font-family:var(--font-serif);font-size:2rem;font-weight:400;line-height:1.1;color:var(--color);margin-bottom:6px}.q-card-sub{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.04em}.q-card-bar{height:4px;background:var(--border-color);border-radius:2px;overflow:hidden;margin-top:6px}.q-card-bar-fill{height:100%;background:#3b4ad6;border-radius:2px;transition:width .3s}.dark-mode .q-card-bar-fill{background:#a7b2ff}.q-detail{display:grid;grid-template-columns:1fr 320px;gap:16px;margin-bottom:20px}.q-throughput{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-chart-wrap{position:relative}.q-throughput canvas{width:100%;display:block}.q-chart-tooltip{position:absolute;pointer-events:none;background:var(--paper-card);border:1px solid var(--border-color);border-radius:6px;padding:6px 10px;font-family:var(--font-mono);font-size:11px;line-height:1.6;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.15);z-index:10}.q-chart-tooltip .q-tip-time{color:var(--ink-muted);margin-bottom:2px}.q-chart-tooltip .q-tip-completed{color:#3b4ad6}.q-chart-tooltip .q-tip-failed{color:#b42318}.dark-mode .q-chart-tooltip .q-tip-completed{color:#a7b2ff}.dark-mode .q-chart-tooltip .q-tip-failed{color:#f08a82}.q-chart-crosshair{position:absolute;top:0;width:1px;height:100%;background:var(--ink-muted);opacity:.3;pointer-events:none;z-index:9}.q-stats-panel{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px;display:flex;flex-direction:column}.q-section-label{font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:lowercase;letter-spacing:.04em;margin-bottom:14px}.q-section-right{float:right;text-transform:uppercase;font-size:10px;letter-spacing:.08em}.q-legend-completed{color:#3b4ad6}.q-legend-failed{color:#b42318;margin-left:8px}.q-legend-exec{color:#b8860b;margin-left:8px;letter-spacing:2px}.dark-mode .q-legend-completed{color:#a7b2ff}.dark-mode .q-legend-failed{color:#f08a82}.dark-mode .q-legend-exec{color:#f5c842}.q-chart-tooltip .q-tip-exec{color:#b8860b}.dark-mode .q-chart-tooltip .q-tip-exec{color:#f5c842}.q-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px;flex:1}.q-stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:2px}.q-stat-value{font-family:var(--font-serif);font-size:1.25rem;font-weight:400;color:var(--color);line-height:1.2}.q-stats-actions{display:flex;gap:8px;margin-top:16px;padding-top:14px;border-top:1px solid var(--border-color)}.q-stats-actions .btn{font-family:var(--font-mono);font-size:11px;padding:6px 14px;border-radius:8px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.q-jobs{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-jobs-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:12px}.q-state-filters{display:inline-flex;gap:6px;flex-wrap:wrap}.q-state-toggle{cursor:pointer;display:inline-flex;align-items:center}.q-state-toggle input{display:none}.q-state-chip{font-family:var(--font-mono);font-size:11px;padding:3px 10px;border-radius:10px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);transition:opacity .15s,background .15s;text-transform:capitalize}.q-state-toggle input:checked+.q-state-chip{opacity:1}.q-state-toggle input:not(:checked)+.q-state-chip{opacity:.4;text-decoration:line-through}.q-state-badge,.q-state-chip{font-family:var(--font-mono);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.q-state-badge{display:inline-block;padding:2px 8px;border-radius:8px}.q-state-active{background:#dbeafe;color:#1d4ed8}.q-state-waiting{background:#fef3c7;color:#92400e}.q-state-delayed{background:#e0e7ff;color:#4338ca}.q-state-failed{background:#fee2e2;color:#b91c1c}.q-state-completed{background:#dcfce7;color:#166534}.dark-mode .q-state-active{background:rgba(59,130,246,.2);color:#93bbfd}.dark-mode .q-state-waiting{background:rgba(251,191,36,.15);color:#fbbf24}.dark-mode .q-state-delayed{background:rgba(99,102,241,.2);color:#a5b4fc}.dark-mode .q-state-failed{background:rgba(239,68,68,.2);color:#fca5a5}.dark-mode .q-state-completed{background:rgba(34,197,94,.15);color:#86efac}.q-cell-state{width:120px}.q-delay-hint{display:block;font-size:10px;color:var(--ink-muted);margin-top:2px;font-family:var(--font-mono)}.q-search-row{display:flex;align-items:center;gap:10px;margin-bottom:12px}.q-search-row .form-control{max-width:320px;height:34px}.q-auto-refresh{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap}.q-table{width:100%;border-collapse:collapse}.q-table thead th{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;padding:8px 10px;border-bottom:1px solid var(--border-color);text-align:left;white-space:nowrap}.q-table tbody tr{border-bottom:1px solid var(--border-color);transition:background .1s}.q-table tbody tr:hover{background:var(--paper-bg-alt)}.q-table tbody tr:last-child{border-bottom:none}.q-table tbody td{padding:10px 10px;font-size:.875rem;vertical-align:middle}.q-cell-id{font-family:var(--font-mono);font-size:12px;white-space:nowrap}.q-cell-id{display:flex;align-items:center;gap:8px}.q-chevron{font-size:10px;color:var(--ink-muted);transition:transform .15s;flex-shrink:0}.q-chevron-open{transform:rotate(90deg)}.q-cell-id a{color:var(--color)}.q-cell-payload{font-family:var(--font-mono);font-size:12px;color:var(--color)}.q-payload-detail{color:var(--ink-muted)}.q-cell-num{font-family:var(--font-mono);font-size:12px;text-align:center;white-space:nowrap}.q-cell-progress{min-width:120px}.q-progress-wrap{display:flex;align-items:center;gap:8px}.q-progress-bar{flex:1;height:6px;border-radius:3px;overflow:hidden;background-image:linear-gradient(to right,#3b4ad6 var(--pct,0),var(--border-color) var(--pct,0))}.dark-mode .q-progress-bar{background-image:linear-gradient(to right,#a7b2ff var(--pct,0),var(--border-color) var(--pct,0))}.q-progress-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap;min-width:32px;text-align:right}.q-cell-actions{text-align:right;white-space:nowrap}.q-cell-actions .btn{padding:3px 8px;font-size:11px;background:0 0;border:1px solid var(--border-color);color:var(--ink-muted)}.q-cell-actions .btn:hover{color:var(--color)}.q-row-failed{background:rgba(180,35,24,.04)}.dark-mode .q-row-failed{background:rgba(240,138,130,.06)}.q-error-detail{padding:4px 10px 12px;font-size:12px}.q-error-reason{color:#b42318;font-size:.8125rem;margin-bottom:4px}.dark-mode .q-error-reason{color:#f08a82}.q-toast-error{background:#fbe7e7;color:#b42318;border:1px solid #f3c7c7;border-radius:8px;padding:10px 16px;margin-bottom:12px;font-family:var(--font-mono);font-size:12px;cursor:pointer;display:flex;align-items:center;gap:8px}.dark-mode .q-toast-error{background:rgba(240,138,130,.1);color:#f08a82;border-color:rgba(240,138,130,.25)}.q-error-stack{font-size:.75rem;max-height:120px;overflow:auto;margin:4px 0 0;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:6px;padding:8px 10px}.q-row-expanded>td{border-bottom-color:transparent}.q-detail-row>td{padding:0 10px 14px!important;border-bottom:1px solid var(--border-color)}.q-job-detail{background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:8px;padding:14px 16px}.q-job-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px 20px;margin-bottom:10px}.q-job-detail-item{display:flex;flex-direction:column;gap:2px}.q-job-detail-label{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.q-job-detail-value{font-family:var(--font-mono);font-size:12px;color:var(--color);word-break:break-all}.q-job-detail-value a{color:var(--color)}.q-job-detail-error{margin:8px 0}.q-job-detail-actions{display:flex;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color)}.q-job-detail-actions .btn{font-family:var(--font-mono);font-size:11px;padding:5px 12px;border-radius:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}@media (max-width:900px){.q-detail{grid-template-columns:1fr}.q-cards{flex-direction:column}.q-card{min-width:100%}.q-jobs-header{flex-direction:column;align-items:flex-start}.q-tabs{flex-wrap:wrap}.q-search-row{flex-wrap:wrap}.q-search-row .form-control{max-width:100%;flex:1}.q-table{font-size:12px}.q-header{flex-direction:column}.q-job-detail-grid{grid-template-columns:1fr 1fr}}@media (max-width:900px){.paper-table .paper-table-head{display:none}.paper-table .admin-users-row,.paper-table .paper-table-row,.paper-table.paper-table-conferences .paper-table-row,.paper-table.paper-table-repos .paper-table-row{display:flex!important;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:14px 0;grid-template-columns:none!important}.paper-table .cell-anon{flex:1 1 calc(100% - 52px);min-width:0;order:1}.paper-table .cell-actions{flex:0 0 auto;order:2;align-self:center}.paper-table .cell-conf,.paper-table .cell-expires,.paper-table .cell-status,.paper-table .cell-views{order:3;font-size:13px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;text-align:left}.paper-table .cell-status{flex-wrap:nowrap;gap:6px;min-width:0}.paper-table .cell-status .status-sub{flex-basis:auto;font-size:13px;line-height:inherit}.paper-table .cell-status .status-sub::before{content:"·";margin-right:6px;color:var(--ink-faint)}.paper-table .cell-conf{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views.num{text-align:left}.paper-table .paper-table-skeleton .cell-expires,.paper-table .paper-table-skeleton .cell-status,.paper-table .paper-table-skeleton .cell-views{flex:1 1 30%}.paper-table .cell-views::before{content:'\f06e';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table .cell-expires::before{content:'\f017';font-family:'Font Awesome 5 Free';font-weight:400;font-size:10px;color:var(--ink-muted)}.paper-table .cell-conf::before{content:'\f51c';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table-dashboard .cell-conf::before{content:none}.paper-table .cell-conf:has(.empty-dash),.paper-table .cell-expires:has(.empty-dash){display:none}.paper-table .cell-expires::before,.paper-table .cell-views::before{color:var(--ink-faint)}}.paper-page .dropdown-menu{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);box-shadow:0 12px 28px rgba(26,24,21,.08);padding:6px;min-width:220px;font-family:var(--font-sans);font-size:14px;color:var(--color);margin-top:6px}.paper-page .dropdown-menu .dropdown-header{font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px;font-weight:500}.paper-page .dropdown-menu .dropdown-item{border-radius:6px;padding:8px 10px;color:var(--color);font-size:14px;display:flex;align-items:center;gap:8px}.paper-page .dropdown-menu .dropdown-item:focus,.paper-page .dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .dropdown-menu .dropdown-item i{width:16px;font-size:13px;color:var(--ink-muted)}.paper-page .dropdown-menu .form-check.dropdown-item{padding:8px 10px 8px 36px!important;position:relative}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-input{position:absolute;left:12px;top:50%;transform:translateY(-50%);margin:0;width:16px;height:16px;accent-color:var(--color);cursor:pointer}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-label{font-family:var(--font-sans);font-size:14px;color:var(--color);font-weight:400;margin:0;cursor:pointer}.btn.btn-icon-dots{width:32px;height:32px;padding:0;border:1px solid transparent;background:0 0;color:var(--ink-muted);border-radius:6px;display:inline-flex;align-items:center;justify-content:center;line-height:1}.btn.btn-icon-dots:focus,.btn.btn-icon-dots:hover,.btn.btn-icon-dots[aria-expanded=true]{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.btn.btn-icon-dots::after{display:none}.btn.btn-icon-dots i{font-size:15px}.paper-page .repo-list-empty{border-top:none;padding:56px 20px;color:var(--ink-muted)}.paper-page .filter-chip{background:var(--paper-bg-alt);color:var(--color);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:4px 10px;border-radius:999px}@media (max-width:768px){.paper-page .paper-page-title{font-size:clamp(1.4rem,6vw,1.9rem);margin:4px 0 2px}.paper-page .paper-page-lede{font-size:13px;line-height:1.4;margin-bottom:0}.paper-page .btn-ink{padding:6px 12px;font-size:13px}.paper-page .quota-row{grid-template-columns:1fr;gap:12px;padding:0;margin:16px 0 0}.paper-page .dashboard-filter-row{padding:10px 0;margin-top:12px;gap:8px}.paper-page .quota-header{flex-direction:row;align-items:baseline;gap:8px}.paper-page .quota-value{white-space:nowrap}.paper-page .dashboard-filter-controls{width:100%}.paper-page .dashboard-filter-controls .btn-group{flex:1 1 100%;display:flex}.paper-page .dashboard-filter-controls .btn-group .btn{flex:1;justify-content:center}.paper-page .dashboard-filter-controls .dropdown{flex:1 1 0;min-width:0}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{width:100%;justify-content:space-between}.paper-page .dashboard-filter-controls .dropdown .filter-btn-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media (max-width:480px){.paper-page .paper-page-lede{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}}.empty-state{text-align:center;padding:40px 20px;opacity:.6}.empty-state i{font-size:2rem;margin-bottom:10px;display:block}.paper-page .progress{height:10px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;margin-bottom:20px}.paper-page .progress .progress-bar{background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:10px;line-height:10px}.paper-page .progress .progress-bar.bg-success{background:var(--status-ready)!important}.paper-page .progress .progress-bar.bg-warning{background:var(--status-progress)!important;color:#fff}.paper-page .progress .progress-bar.bg-danger{background:var(--status-error)!important}.paper-page .progress .progress-bar.bg-dark{background:var(--ink-faint)!important}.paper-page .form>h5,.paper-page form>h5,.paper-page>h5{font-family:var(--font-mono);font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin:24px 0 8px}.paper-page .accordion .card{background:var(--paper-card,var(--sidebar-bg-color));border:1px solid var(--border-color);border-radius:8px!important;margin-bottom:8px;overflow:hidden}.paper-page .accordion .card+.card{border-top:1px solid var(--border-color)}.paper-page .accordion .card-header{background:0 0;border:none;padding:0}.paper-page .accordion .card-header .btn{color:var(--color)!important;font-family:var(--font-sans);font-weight:500;font-size:14px;padding:14px 18px!important;background:0 0!important;border:none!important;position:relative}.paper-page .accordion .card-header .btn::after{content:"+";position:absolute;right:18px;font-family:var(--font-serif);font-size:20px;color:var(--ink-muted)}.paper-page .accordion .card-header .btn:not(.collapsed)::after{content:"–"}.paper-page .accordion .card-body{padding:6px 18px 18px!important;border-top:1px solid var(--border-soft)}.paper-page .accordion .form-check-label{color:var(--color);font-weight:500;font-size:14px}.paper-page .accordion .form-text{color:var(--ink-muted);font-size:12px;margin-top:2px}.faq-section .panel-body code{font-family:var(--font-mono);font-size:13px;padding:1px 6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:3px;color:var(--color)}.faq-section .panel-body a{color:var(--accent)}@media (max-width:820px){.paper-faq-body{grid-template-columns:1fr;gap:24px}.paper-faq-toc{position:static}}.paper-footer{margin-top:80px;padding:56px max(20px,calc((100vw - 1200px)/ 2)) 28px;border-top:1px solid var(--border-color);background:var(--canvas-bg-color);font-family:var(--font-sans)}.paper-footer-inner{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:40px}.paper-footer-brand .paper-footer-mark{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--color)}.paper-footer-brand .paper-footer-mark em{font-style:italic;font-weight:400}.paper-footer-tag{margin-top:10px;color:var(--ink-soft);font-size:14px;line-height:1.55;max-width:340px}.paper-footer-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.1em;text-transform:uppercase;margin-bottom:14px}.paper-footer-col a{display:block;color:var(--color);font-size:14px;padding:4px 0;text-decoration:none}.paper-footer-col a:hover{color:var(--accent)}.paper-footer-rule{height:1px;background:var(--border-color);margin:40px 0 16px}.paper-footer-foot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--ink-muted);font-family:var(--font-mono);letter-spacing:.02em}.paper-footer-foot .paper-footer-meta{font-family:var(--font-serif);font-style:italic;font-size:14px;letter-spacing:0;color:var(--ink-soft)}@media (max-width:768px){.paper-footer-inner{grid-template-columns:1fr 1fr}}.file.folder.truncated .truncated-warning{color:#d39e00;margin-left:4px;font-size:.85em;flex-shrink:0}.file.folder.truncated>a{color:#d39e00}body{--bucket-error-bg:#FCEDED;--bucket-error-fg:#8A1F1F;--bucket-error-bd:#F0C4C4;--bucket-error-dot:#B53737;--bucket-warn-bg:#FFF3DF;--bucket-warn-fg:#7A4D00;--bucket-warn-bd:#F0D8A0;--bucket-warn-dot:#B07A2F;--bucket-info-bg:#EAF2EC;--bucket-info-fg:#2C5D3A;--bucket-info-bd:#C5DCCD;--bucket-info-dot:#5B8D6B;--card-shadow:0 1px 2px rgba(26, 24, 21, 0.04),0 4px 14px rgba(26, 24, 21, 0.05);--card-shadow-hover:0 1px 2px rgba(26, 24, 21, 0.06),0 8px 24px rgba(26, 24, 21, 0.08)}.dark-mode{--bucket-error-bg:rgba(255, 139, 123, 0.10);--bucket-error-fg:#FF8B7B;--bucket-error-bd:rgba(255, 139, 123, 0.28);--bucket-error-dot:#FF8B7B;--bucket-warn-bg:rgba(255, 211, 122, 0.10);--bucket-warn-fg:#FFD37A;--bucket-warn-bd:rgba(255, 211, 122, 0.28);--bucket-warn-dot:#FFD37A;--bucket-info-bg:rgba(152, 200, 168, 0.10);--bucket-info-fg:#98C8A8;--bucket-info-bd:rgba(152, 200, 168, 0.28);--bucket-info-dot:#98C8A8;--card-shadow:0 1px 2px rgba(0, 0, 0, 0.35),0 6px 18px rgba(0, 0, 0, 0.30);--card-shadow-hover:0 2px 4px rgba(0, 0, 0, 0.45),0 12px 28px rgba(0, 0, 0, 0.40)}.errors-page .errors-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:4px 0 8px}.errors-page .errors-actions{display:flex;gap:6px}.errors-page .kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin:14px 0 18px}.errors-page .kpi-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease,transform 160ms ease}.errors-page .kpi-card:hover{box-shadow:var(--card-shadow-hover)}.errors-page .kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.errors-page .kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.errors-page .kpi-card.kpi-error .kpi-value{color:var(--bucket-error-fg)}.errors-page .kpi-card.kpi-warn .kpi-value{color:var(--bucket-warn-fg)}.errors-page .kpi-card.kpi-info .kpi-value{color:var(--bucket-info-fg)}.errors-page .kpi-sub{font-size:.75rem;color:var(--ink-muted);font-style:italic}.errors-page .kpi-sub.up{color:var(--bucket-error-fg);font-style:normal}.errors-page .kpi-sub.down{color:var(--bucket-info-fg);font-style:normal}.errors-page .dropped-warn{color:var(--bucket-error-fg);font-weight:600;font-style:normal}.errors-page .volume-chart{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;margin-bottom:18px;box-shadow:var(--card-shadow)}.errors-page .volume-head{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}.errors-page .volume-legend{display:flex;gap:14px;align-items:center;text-transform:none;letter-spacing:0;font-family:var(--font-sans)}.errors-page .volume-legend .dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px;vertical-align:middle}.errors-page .dot.dot-error{background:var(--bucket-error-dot)}.errors-page .dot.dot-warn{background:var(--bucket-warn-dot)}.errors-page .dot.dot-info{background:var(--bucket-info-dot)}.errors-page .volume-bars{display:flex;align-items:flex-end;gap:4px;height:80px}.errors-page .volume-bar{display:flex;flex-direction:column-reverse;flex:1 1 0;min-width:6px;height:100%}.errors-page .volume-bar .seg{display:block;width:100%}.errors-page .seg.seg-error{background:var(--bucket-error-dot)}.errors-page .seg.seg-warn{background:var(--bucket-warn-dot)}.errors-page .seg.seg-info{background:var(--bucket-info-dot);opacity:.7}.errors-page .errors-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}.errors-page .seg-tabs{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden;background:var(--paper-card)}.errors-page .seg-tabs button{background:0 0;border:none;padding:6px 14px;font-size:.875rem;cursor:pointer;color:var(--color);font-family:var(--font-sans)}.errors-page .seg-tabs button+button{border-left:1px solid var(--border-color)}.errors-page .seg-tabs button.active{background:var(--primary-bg);color:var(--primary-color)}.errors-page .errors-toolbar .search-wrap{position:relative;flex:1 1 320px;min-width:220px}.errors-page .errors-toolbar .search-wrap input{width:100%;padding:6px 10px 6px 32px;border:1px solid var(--border-color);border-radius:8px;font-family:var(--font-mono);font-size:.8125rem;background:var(--input-bg);color:var(--input-color)}.errors-page .errors-toolbar .search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--ink-muted);font-size:.875rem}.errors-page .errors-toolbar .filter-count{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:.75rem;color:var(--ink-muted)}.errors-page .errors-toolbar .select-wrap{display:inline-flex;align-items:center;gap:6px}.errors-page .errors-toolbar .select-wrap label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin:0}.errors-page .errors-toolbar .select-wrap select{background:var(--input-bg);color:var(--input-color);border:1px solid var(--border-color);border-radius:8px}.errors-page .errors-toolbar .autoref{display:inline-flex;gap:6px;align-items:center;font-size:.8125rem;color:var(--color);cursor:pointer;margin:0}.errors-page .btn-icon{width:32px;padding:4px 0}.errors-page .errors-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;overflow:hidden;box-shadow:var(--card-shadow)}.errors-page .errors-list-head,.errors-page .errors-row-main{display:grid;grid-template-columns:110px 100px 100px 1fr 60px 70px;gap:16px;padding:18px 20px;align-items:start}.errors-page .errors-list-head{padding:12px 20px;align-items:center}.errors-page .errors-list-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.errors-page .errors-row{border-bottom:1px solid var(--border-soft)}.errors-page .errors-row:last-child{border-bottom:none}.errors-page .errors-row.open{background:var(--paper-bg-alt)}.errors-page .errors-row-main{cursor:pointer}.errors-page .errors-row-main:hover{background:var(--hover-bg-color)}.errors-page .col-when .when-rel{font-size:.9375rem;color:var(--color);font-variant-numeric:tabular-nums}.errors-page .col-when .when-abs{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-muted);font-variant-numeric:tabular-nums;margin-top:2px}.errors-page .col-sev{display:flex;align-items:center;gap:8px}.errors-page .sev-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.errors-page .sev-dot.sev-error{background:var(--bucket-error-dot)}.errors-page .sev-dot.sev-warn{background:var(--bucket-warn-dot)}.errors-page .sev-dot.sev-info{background:var(--bucket-info-dot)}.errors-page .sev-label{font-family:var(--font-mono);font-size:.75rem;letter-spacing:.08em;color:var(--color)}.errors-page .pill-module{display:inline-block;font-family:var(--font-mono);font-size:.75rem;background:var(--paper-bg-alt);color:var(--ink-soft);border:1px solid var(--border-color);padding:3px 10px;border-radius:6px}.errors-page .col-msg .msg-code{font-family:var(--font-mono);font-size:1rem;color:var(--color);font-weight:600}.errors-page .col-msg .msg-context{color:var(--ink-muted);font-style:italic;font-size:.875rem;margin-left:10px}.errors-page .col-msg .msg-detail{color:var(--ink-soft);font-family:var(--font-mono);font-size:.8125rem;margin-left:10px}.errors-page .col-msg .msg-url{color:var(--ink-muted);font-family:var(--font-mono);font-size:.8125rem;margin-top:6px;word-break:break-all}.errors-page .count-pill{display:inline-block;padding:2px 8px;border-radius:4px;background:var(--primary-bg);color:var(--primary-color);font-family:var(--font-mono);font-size:.75rem;font-variant-numeric:tabular-nums}.errors-page .count-pill.count-pill-muted{background:0 0;color:var(--ink-muted);border:1px solid var(--border-color)}.errors-page .status-pill{display:inline-block;padding:2px 10px;border-radius:4px;font-family:var(--font-mono);font-size:.8125rem;font-variant-numeric:tabular-nums;border:1px solid transparent}.errors-page .status-pill.status-error{background:var(--bucket-error-bg);color:var(--bucket-error-fg);border-color:var(--bucket-error-bd)}.errors-page .status-pill.status-warn{background:var(--bucket-warn-bg);color:var(--bucket-warn-fg);border-color:var(--bucket-warn-bd)}.errors-page .status-pill.status-info{background:var(--bucket-info-bg);color:var(--bucket-info-fg);border-color:var(--bucket-info-bd)}.errors-page .errors-row-detail{padding:0 16px 16px}.errors-page .detail-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border-color);margin-bottom:12px}.errors-page .detail-tabs button{background:0 0;border:0;border-bottom:2px solid transparent;padding:8px 12px;font-size:.875rem;cursor:pointer;color:var(--ink-muted);font-family:var(--font-sans)}.errors-page .detail-tabs button.active{color:var(--color);border-bottom-color:var(--color)}.errors-page .detail-body{display:grid;grid-template-columns:1fr 260px;gap:20px}.errors-page .detail-main pre{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;font-family:var(--font-mono);font-size:.875rem;line-height:1.7;color:var(--color);max-height:26em;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;margin:0;box-shadow:var(--card-shadow)}.errors-page .related-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;max-height:22em;overflow:auto;box-shadow:var(--card-shadow)}.errors-page .stack-pre{line-height:1.45;white-space:pre;overflow-x:auto}.errors-page .related-row{display:flex;gap:10px;padding:6px 12px;align-items:center;border-bottom:1px solid var(--border-soft);font-size:.8125rem}.errors-page .related-row:last-child{border-bottom:none}.errors-page .detail-actions{display:flex;gap:6px;align-items:center;margin-top:10px}.errors-page .copy-hint{font-size:.75rem;color:var(--bucket-info-fg)}.errors-page .detail-aside{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px;box-shadow:var(--card-shadow)}.errors-page .aside-block+.aside-block{margin-top:16px}.errors-page .aside-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin-bottom:4px}.errors-page .aside-value{font-family:var(--font-serif);font-size:1rem;color:var(--color);word-break:break-word;line-height:1.3}.errors-page .aside-value.mono{font-family:var(--font-mono);font-size:.8125rem}.errors-page .aside-sub{color:var(--ink-muted);font-style:italic;font-size:.8125rem;font-family:var(--font-sans)}.errors-page .errors-pager{display:flex;justify-content:space-between;align-items:center;padding:10px 0;color:var(--ink-muted);font-size:.875rem}@media (max-width:720px){.errors-page .errors-list-head,.errors-page .errors-row-main{grid-template-columns:80px 80px 1fr 60px}.errors-page .errors-list-head .col-mod,.errors-page .errors-list-head .col-sev,.errors-page .errors-row-main .col-mod,.errors-page .errors-row-main .col-sev{display:none}.errors-page .detail-body{grid-template-columns:1fr}}.overview-page .ov-header{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:2px}.overview-page .ov-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-left:6px;vertical-align:middle}.overview-page .ov-dot-ok{background:#2f7a44}.overview-page .ov-dot-warn{background:#c48a2e}.overview-page .ov-dot-idle{background:var(--ink-muted)}.dark-mode .overview-page .ov-dot-ok{background:#7dc894}.dark-mode .overview-page .ov-dot-warn{background:#e8b970}.overview-page .ov-kpi-row{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;margin:16px 0 22px}.overview-page .ov-kpi-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease}.overview-page .ov-kpi-card:hover{box-shadow:var(--card-shadow-hover)}.overview-page .ov-kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.overview-page .ov-kpi-value.ov-val-warn{color:#b42318}.dark-mode .overview-page .ov-kpi-value.ov-val-warn{color:#f08a82}.overview-page .ov-kpi-sub{font-size:.75rem;color:var(--ink-muted);margin-top:2px}.overview-page .ov-daily-row{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:-4px 0 22px}.overview-page .ov-daily-card{background:var(--primary-bg);border:1px solid var(--border-color);border-radius:12px;padding:16px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-daily-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-daily-value{font-family:var(--font-serif);font-size:2.5rem;font-weight:400;line-height:1;color:var(--accent,#3b4ad6);margin-top:6px}.overview-page .ov-daily-sub{font-size:.75rem;color:var(--ink-muted);margin-top:5px}.dark-mode .overview-page .ov-daily-card{background:var(--paper-card)}.dark-mode .overview-page .ov-daily-value{color:#a7b2ff}.overview-page .ov-chart-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:18px}.overview-page .ov-chart-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px 14px;box-shadow:var(--card-shadow)}.overview-page .ov-chart-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.overview-page .ov-chart-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-chart-legend{font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);display:flex;align-items:center;gap:5px}.overview-page .ov-dot-legend{display:inline-block;width:8px;height:8px;border-radius:50%}.overview-page .ov-dot-accent{background:var(--accent,#3b4ad6)}.overview-page .ov-dot-ok-fill{background:#2f7a44}.overview-page .ov-dot-user-fill{background:#8b5e2e}.overview-page .ov-dot-new-user-fill{background:#c48a2e}.dark-mode .overview-page .ov-dot-ok-fill{background:#7dc894}.dark-mode .overview-page .ov-dot-user-fill{background:#d0a15f}.dark-mode .overview-page .ov-dot-new-user-fill{background:#e8b970}.overview-page .ov-spark-bars{display:flex;align-items:flex-end;gap:3px;height:140px}.overview-page .ov-spark-col{flex:1;display:flex;align-items:flex-end;height:100%;position:relative}.overview-page .ov-spark-fill{width:100%;background:var(--accent,#3b4ad6);border-radius:2px 2px 0 0;transition:height .3s ease;opacity:.55}.overview-page .ov-spark-fill-alt{background:#2f7a44}.overview-page .ov-spark-fill-user{background:#8b5e2e}.overview-page .ov-spark-fill-new-user{background:#c48a2e}.dark-mode .overview-page .ov-spark-fill-alt{background:#7dc894}.dark-mode .overview-page .ov-spark-fill-user{background:#d0a15f}.dark-mode .overview-page .ov-spark-fill-new-user{background:#e8b970}.overview-page .ov-spark-col:hover .ov-spark-fill{opacity:1}.overview-page .ov-spark-col.has-tip::after{content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%) translateY(4px);z-index:10;padding:6px 8px;border-radius:6px;background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:.6875rem;line-height:1;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip::before{content:"";position:absolute;left:50%;bottom:calc(100% + 4px);transform:translateX(-50%) translateY(4px);z-index:10;border:5px solid transparent;border-top-color:var(--color);opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip:hover::after,.overview-page .ov-spark-col.has-tip:hover::before{opacity:1;transform:translateX(-50%) translateY(0)}.overview-page .ov-spark-x{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);margin-top:6px}.overview-page .ov-triple-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:18px}.overview-page .ov-panel-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-panel-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px}.overview-page .ov-panel-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-panel-meta{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted)}.overview-page .ov-panel-foot{margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color);font-size:.8125rem}.overview-page .ov-panel-foot a{color:var(--link-color);text-decoration:none}.overview-page .ov-panel-foot a:hover{text-decoration:underline}.overview-page .ov-performance{min-width:0;margin:22px 0}.overview-page .ov-performance-head{align-items:center;flex-wrap:wrap;gap:12px 20px}.overview-page .ov-performance-head h2{margin:0 0 4px}.overview-page .ov-performance-note{margin:0 0 12px;font-size:12px;line-height:1.5;color:var(--ink-muted)}.overview-page .ov-performance-head .ov-performance-note{margin:0}.overview-page .ov-performance-window{display:flex;align-items:center;gap:8px;flex-shrink:0}.overview-page .ov-performance-window label{margin:0;font-size:12px;color:var(--ink-muted)}.overview-page .ov-performance-window select{width:auto}.overview-page .ov-performance-tabs{margin:0 0 16px;gap:4px}.overview-page .ov-performance-tabs .paper-tab{white-space:nowrap}.overview-page .ov-metrics-scroll{max-width:100%;overflow-x:auto;border:1px solid var(--border-color);border-radius:var(--radius-control,8px)}.overview-page .ov-metrics-table{width:100%;border-collapse:collapse;color:var(--color);font-size:13px;line-height:1.5;font-variant-numeric:tabular-nums}.overview-page .ov-metrics-table td,.overview-page .ov-metrics-table th{padding:10px 12px;border-bottom:1px solid var(--border-color);vertical-align:middle;white-space:nowrap}.overview-page .ov-metrics-table thead th{background:var(--paper-bg-alt);color:var(--ink-muted);font-size:12px;font-weight:500}.overview-page .ov-metrics-table .num{text-align:right}.overview-page .ov-metrics-table tr:last-child>*{border-bottom:0}.overview-page .ov-metrics-table thead tr:last-child>*{border-bottom:1px solid var(--border-color)}.overview-page .ov-metrics-table tbody tr:hover{background:var(--hover-bg-color)}.overview-page .ov-metrics-table .ov-metric-name{min-width:190px;max-width:280px;text-align:left;white-space:normal;overflow-wrap:anywhere;font-weight:500}.overview-page .ov-metrics-table small{display:block;margin-top:3px;font-size:11px;font-weight:400;color:var(--ink-muted)}.overview-page .ov-metrics-table small .ui-icon{width:12px;height:12px}.overview-page .ov-metric-warning-row{background:rgba(196,138,46,.07)}.overview-page .ov-metric-warn,.overview-page .ov-metrics-table small.ov-metric-warn{color:#946519}.dark-mode .overview-page .ov-metric-warn,.dark-mode .overview-page .ov-metrics-table small.ov-metric-warn{color:#e8b970}.overview-page .ov-performance-message{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:10px 12px;margin:0 0 16px;border:1px solid var(--border-color);border-radius:var(--radius-control,8px);font-size:13px;line-height:1.5}.overview-page .ov-performance-message span{flex:1;min-width:160px}.overview-page .ov-performance-warning{background:rgba(196,138,46,.07)}.overview-page .ov-performance-empty{margin:0;padding:24px 12px;text-align:center;font-size:13px;color:var(--ink-muted)}.overview-page .ov-performance-help{margin-top:16px;font-size:12px;line-height:1.6;color:var(--ink-muted)}.overview-page .ov-performance-help summary{width:fit-content;cursor:pointer}.overview-page .ov-performance-help p{margin:8px 0 0;max-width:80ch}@media (max-width:575px){.overview-page .ov-performance{padding:16px 12px}.overview-page .ov-performance-window{width:100%}.overview-page .ov-performance-window select{flex:1;min-width:0}.overview-page .ov-performance-tabs .paper-tab{flex:1;padding:10px 8px}}.overview-page .ov-stacked-bar{display:flex;height:18px;border-radius:6px;overflow:hidden;margin-bottom:14px}.overview-page .ov-bar-seg{min-width:2px;transition:width .4s ease}.overview-page .ov-bar-ready{background:#2f7a44}.overview-page .ov-bar-preparing{background:#c48a2e}.overview-page .ov-bar-error{background:#b42318}.overview-page .ov-bar-expired{background:#8a857c}.overview-page .ov-bar-removed{background:#b5afa2}.dark-mode .overview-page .ov-bar-ready{background:#7dc894}.dark-mode .overview-page .ov-bar-preparing{background:#e8b970}.dark-mode .overview-page .ov-bar-error{background:#f08a82}.dark-mode .overview-page .ov-bar-expired{background:#6b665e}.dark-mode .overview-page .ov-bar-removed{background:#4a453e}.overview-page .ov-bar-legend{display:flex;flex-direction:column;gap:6px}.overview-page .ov-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;text-decoration:none;color:inherit}.overview-page .ov-legend-item:hover{text-decoration:none;color:inherit}.overview-page .ov-swatch{display:inline-block;width:12px;height:12px;border-radius:3px;flex-shrink:0}.overview-page .ov-legend-n{margin-left:auto;font-family:var(--font-mono);font-size:.8125rem;font-weight:600}.overview-page .ov-error-bars{display:flex;flex-direction:column;gap:12px}.overview-page .ov-ebar-row{display:flex;align-items:center;gap:10px}.overview-page .ov-ebar-label{width:30px;flex-shrink:0;font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;color:var(--ink-muted)}.overview-page .ov-ebar-track{flex:1;height:10px;background:var(--hover-bg-color);border-radius:5px;overflow:hidden}.overview-page .ov-ebar-fill{height:100%;border-radius:5px;transition:width .4s ease}.overview-page .ov-ebar-error{background:#b42318}.overview-page .ov-ebar-warn{background:#c48a2e}.overview-page .ov-ebar-info{background:var(--accent,#3b4ad6)}.dark-mode .overview-page .ov-ebar-error{background:#f08a82}.dark-mode .overview-page .ov-ebar-warn{background:#e8b970}.overview-page .ov-ebar-n{width:36px;text-align:right;font-family:var(--font-mono);font-size:.8125rem;font-weight:600;flex-shrink:0}.overview-page .ov-routes-table{display:flex;flex-direction:column}.overview-page .ov-route-row{display:grid;grid-template-columns:1fr 60px 60px 60px;padding:8px 0;border-bottom:1px solid var(--border-soft,var(--border-color));text-decoration:none;color:inherit;font-size:.875rem;align-items:center}.overview-page .ov-route-row:last-child{border-bottom:none}.overview-page .ov-route-row:hover{background:var(--hover-bg-color);text-decoration:none;color:inherit}.overview-page .ov-route-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);border-bottom:1px solid var(--border-color)}.overview-page .ov-route-head:hover{background:0 0}.overview-page .ov-route-name{font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-n{text-align:right;font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-lat{color:var(--ink-muted)}.overview-page .ov-n-bad{color:#b42318;font-weight:600}.dark-mode .overview-page .ov-n-bad{color:#f08a82}.overview-page .ov-services-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;box-shadow:var(--card-shadow);margin-bottom:18px}.overview-page .ov-services-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:16px}.overview-page .ov-services-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.overview-page .ov-svc{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:1px solid var(--border-soft,var(--border-color));border-radius:10px}.overview-page .ov-svc-dot{width:10px;height:10px;border-radius:50%;margin-top:3px;flex-shrink:0}.overview-page .ov-svc-info{display:flex;flex-direction:column;gap:1px;flex:1}.overview-page .ov-svc-name{font-family:var(--font-mono);font-size:.875rem;font-weight:600}.overview-page .ov-svc-meta{font-size:.75rem;color:var(--ink-muted)}.overview-page .ov-svc-detail{font-size:.75rem;color:var(--ink-muted);white-space:nowrap}@media (max-width:900px){.overview-page .ov-kpi-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-daily-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-triple-row{grid-template-columns:1fr}}@media (max-width:720px){.overview-page .ov-kpi-row{grid-template-columns:repeat(2,1fr)}.overview-page .ov-daily-row{grid-template-columns:1fr}.overview-page .ov-chart-row{grid-template-columns:1fr}.overview-page .ov-header{flex-direction:column;gap:8px}}@media (max-width:480px){.overview-page .ov-kpi-row{grid-template-columns:1fr 1fr}.overview-page .ov-services-grid{grid-template-columns:1fr 1fr}}.dashboard-heading-actions{display:flex;flex-direction:column;align-items:flex-end;gap:8px;padding-bottom:12px}.dashboard-heading-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px}.dashboard-connections-link{display:inline-flex;align-items:center;gap:7px;min-height:32px;color:var(--ink-muted);font-size:12px;line-height:1.5}.dashboard-connections-link:hover{color:var(--accent);text-decoration:none}.dashboard-connections-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:2px}@media (max-width:767px){.dashboard-heading-actions{align-items:flex-start;padding-bottom:0;gap:4px}.dashboard-connections-link{min-height:44px}}.paper-settings-connection-link{display:flex;align-items:center;gap:12px;padding:18px 0;color:var(--color);font-size:14px}.paper-settings-connection-link>i{color:var(--ink-muted);font-size:18px}.paper-settings-connection-link>span:first-of-type{flex:1}.paper-settings-connection-link small{display:block;margin-top:4px;color:var(--ink-muted);font-size:12px}.paper-settings-connection-link:hover{color:var(--accent);text-decoration:none}.paper-settings-connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.connections-heading{margin-bottom:36px}.connections-heading .paper-page-title{font-size:clamp(38px,4.5vw,56px);margin-bottom:12px}.connections-heading .paper-page-lede{font-size:15px}.connections-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:56px;align-items:start;border-top:1px solid var(--border-color);padding-top:28px}.connections-grid>section{min-width:0}.connection-title,.connection-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.connection-top{margin-bottom:24px;min-height:28px}.connection-top>i{color:var(--ink-muted);font-size:24px}.connection-top>.fa-key{font-size:18px}.connection-title{margin-bottom:10px}.connections-page h2{font-family:inherit;font-size:22px;font-weight:600;letter-spacing:-.5px;margin:0}.connections-page p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.connection-badge{background:var(--accent-soft);color:var(--accent);font-size:11px;font-weight:600;border-radius:5px;padding:4px 8px;white-space:nowrap}.connection-badge-muted{background:var(--paper-bg-alt);color:var(--ink-muted)}.connection-status{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-muted)}.connection-status::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor}.connection-status.is-connected{color:var(--status-ready)}.connection-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin:22px 0 16px}.connections-page .btn{font-size:13px;padding:9px 13px;white-space:normal}.connection-revoke p,.connections-page .connection-help{font-size:12px}.connection-link{display:inline-flex;align-items:center;gap:8px;border:0;padding:0;background:0 0;color:var(--accent);font-size:13px;line-height:1.6;font-weight:500;text-align:left;cursor:pointer}.connection-link:hover{color:var(--link-hover-color);text-decoration:underline}.connection-link:disabled{color:var(--ink-muted);opacity:.65;cursor:not-allowed;text-decoration:none}.connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:5px}.connection-installations{list-style:none;padding:0;margin:18px 0;border-top:1px solid var(--border-soft)}.connection-installations li{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:14px 0;font-size:12px;border-bottom:1px solid var(--border-soft)}.connection-revoke{border-top:1px solid var(--border-soft);padding-top:18px;margin-top:24px}.connection-danger{color:var(--status-error)}.connection-resources{margin-top:36px;padding-top:28px;border-top:1px solid var(--border-color)}.connection-count{color:var(--ink-muted);font-size:12px}.connection-empty{display:flex;align-items:center;gap:18px;padding:20px 0;margin:22px 0}.connection-empty>i{font-size:22px;color:var(--ink-muted)}.connection-empty h3{font-size:14px;font-weight:600;margin:0 0 5px}.connection-empty p{font-size:12px;margin:0}.connection-empty>a{margin-left:auto;flex-shrink:0}.connection-resource{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:20px 0;border-bottom:1px solid var(--border-color)}.connection-resource-name{flex:1;min-width:180px;overflow-wrap:anywhere;font-size:14px}.connection-resource-name small{display:block;color:var(--ink-muted);font-size:11px;margin-top:5px}.connection-resource-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.connection-resource-actions .connection-help{flex-basis:100%}.connections-page .connection-footnote{display:flex;align-items:baseline;gap:10px;margin-top:22px;font-size:12px}@media (max-width:767px){.connections-grid{grid-template-columns:1fr;gap:28px}.connections-grid>section+section{border-top:1px solid var(--border-color);padding-top:28px}.connection-empty{flex-wrap:wrap}.connection-empty>div{flex:1;min-width:180px}.connection-empty>a{margin-left:40px}.connection-resource-actions{flex-basis:100%}}.paper-table-empty-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px}.paper-table-empty-actions .btn>i{font-size:1em;line-height:1;color:inherit;margin-right:0!important}.auth-back{display:inline-flex;align-items:center;gap:10px;font-size:13px;color:var(--ink-muted);margin-bottom:48px}.auth-layout{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:start}.auth-intro,.auth-options{padding-top:28px}.auth-title-mobile{display:none}.auth-intro .paper-page-title{font-size:clamp(48px,5vw,76px);line-height:1.06;margin:18px 0 24px}.auth-intro .paper-page-lede{max-width:330px}.auth-options{display:grid;gap:28px}.auth-options h2{font-family:inherit;font-size:22px;font-weight:600;margin:0 0 10px}.auth-options p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.auth-options .auth-existing{font-size:12px;border-left:2px solid var(--accent);padding-left:14px;margin:0}.auth-permissions{padding:6px 0 12px;list-style:none;font-size:13px;line-height:1.6}.auth-permissions li{display:flex;gap:10px;margin:12px 0}.auth-permissions i{color:var(--status-ready);margin-top:4px}.auth-continue{display:flex!important;align-items:center;justify-content:space-between;min-height:48px;padding:12px 16px!important}.auth-options small{display:block;font-size:12px;text-align:center;color:var(--ink-muted);margin-top:12px}.auth-legacy{border-top:1px solid var(--border-color);padding-top:24px}.auth-legacy h2{font-size:16px;margin:0}.auth-legacy p{font-size:13px}.source-url-label-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;margin-bottom:8px}.source-url-label-row>.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.repo-access{margin:0}.repo-access-details{margin:12px 0 24px}.source-url-label-row .repo-access-switch{padding:2px}.source-url-label-row .repo-access-switch button{padding:6px 10px;font-size:12px;line-height:20px}.repo-access-main{display:flex;align-items:center;gap:10px;padding:0 0 8px;flex-wrap:wrap}.repo-access-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.repo-access-switch{display:inline-flex;gap:3px;padding:3px;border:1px solid var(--border-color);border-radius:7px;flex-wrap:wrap}.repo-access-switch button{border:0;border-radius:4px;background:0 0;color:var(--ink-muted);padding:7px 10px;font:inherit;font-size:12px;cursor:pointer}.repo-access-switch button[aria-pressed=true]{background:var(--accent-soft);color:var(--accent);opacity:1;cursor:default;font-weight:600}.repo-access-switch button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.repo-access-details .btn{font-size:12px;padding:8px 12px}.repo-access-note{display:flex;gap:6px 16px;flex-wrap:wrap;padding:0;color:var(--ink-muted);font-size:11px;line-height:1.6}@media (max-width:767px){.auth-page{max-width:480px}.auth-back,.auth-intro .paper-eyebrow,.auth-title-desktop{display:none}.auth-title-mobile{display:inline}.auth-layout{grid-template-columns:1fr;gap:24px}.auth-intro,.auth-options{padding-top:0}.auth-intro .paper-page-title{font-size:40px;line-height:1.15;margin:6px 0 12px}.auth-intro .paper-page-lede{max-width:none;font-size:14px;margin:0}.auth-options{gap:24px}.auth-options .connection-top{margin-bottom:16px}.auth-options h2{font-size:18px}.auth-options p{font-size:13px;margin-bottom:12px}.auth-permissions{padding:0;margin:14px 0 20px;font-size:12px}.auth-permissions li{margin:8px 0}.auth-continue{font-size:14px}.auth-legacy{padding-top:20px}.auth-legacy h2{font-size:15px}.auth-legacy .connection-link{min-height:44px}.repo-access-controls{width:100%;gap:12px}}.text-muted{color:var(--ink-muted)!important}.anonymize-review-note,.draft-status{font-size:13px;color:var(--ink-muted)}.anonymize-review-note{padding:12px 0;margin:0}.anonymize-preview-status{padding:20px 32px;color:var(--ink-muted)}.anonymize-preview-status p{margin:0 0 12px}@media (max-width:575px){.dashboard-page .paper-page-lede{margin-bottom:8px}.dashboard-page .dashboard-heading-actions{gap:4px}.dashboard-page .dashboard-connections-link{min-height:32px}.dashboard-page .dashboard-filter-row{margin-top:12px}.anonymize-preview-status{padding:16px}}.paper-page .paper-page-title{font-size:32px}.paper-page.admin-page .paper-page-title{font-size:28px}.paper-page .paper-page-lede{font-size:14px;line-height:1.5}.paper-settings{padding-top:32px}.paper-settings-body{grid-template-columns:180px minmax(0,1fr);gap:40px;margin-top:24px;padding-top:24px;border-top:0}.paper-settings-main .paper-settings-section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px;margin-bottom:16px}.anonymize-page .paper-section-eyebrow,.paper-settings .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:-.01em;margin-bottom:12px}.paper-settings .paper-settings-toc-head{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-settings-section .paper-section-copy{margin-top:0}.paper-settings .quota-row{gap:24px}.paper-settings .quota-header{flex-direction:column;align-items:flex-start;gap:4px}.paper-settings .quota-value{white-space:nowrap}.paper-settings .paper-settings-footer{padding:0 0 20px}.paper-settings .form-control{font-size:14px;border-color:var(--border-color);border-radius:var(--radius-control)}.paper-settings .form-check{padding-top:8px;padding-bottom:8px}.anonymize-page .btn-ink,.explorer-page .btn-ink,.paper-page .btn-ink{background:var(--accent);color:#fff;border-color:var(--accent)}.dark-mode .anonymize-page .btn-ink,.dark-mode .explorer-page .btn-ink,.dark-mode .paper-page .btn-ink{color:#1a1815}.anonymize-page .btn-ink:hover,.explorer-page .btn-ink:hover,.paper-page .btn-ink:hover{background:var(--accent);border-color:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .anonymize-page .btn-ink:hover,.dark-mode .explorer-page .btn-ink:hover,.dark-mode .paper-page .btn-ink:hover{color:#1a1815}.anonymize-page .btn-ink:active,.explorer-page .btn-ink:active,.paper-page .btn-ink:active{filter:brightness(.9)}input[type=date],select{color-scheme:light}.dark-mode input[type=date],.dark-mode select{color-scheme:dark}.draft-status{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;padding:10px 0}.draft-discard{padding:0;border:0;color:var(--accent);font:inherit;font-size:13px;text-decoration:underline;background:0 0;cursor:pointer}.conference-feedback{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px;margin-top:16px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);width:100%}.paper-table{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);margin-top:12px}.dashboard-page .paper-table-dashboard{width:100%}.paper-account-email{margin:20px 0}.paper-account-email .form-control{max-width:420px}.paper-settings .paper-account-email .btn[type=submit]{min-height:36px;padding:7px 18px;white-space:nowrap}.paper-table .paper-table-head{font-family:var(--font-sans);text-transform:none;letter-spacing:0;font-size:12px;background:var(--paper-bg-alt);border-radius:var(--radius-surface) var(--radius-surface) 0 0}.paper-table .paper-table-head,.paper-table .paper-table-row{padding-left:16px;padding-right:16px}.dashboard-page{--dashboard-space-xs:4px;--dashboard-space-sm:8px;--dashboard-space-md:12px;--dashboard-space-lg:16px;--dashboard-space-xl:24px;padding-top:var(--dashboard-space-xl)}.project-icon-definitions{position:absolute;width:0;height:0;overflow:hidden}.project-type-svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.project-empty-icon{width:28px;height:28px;color:var(--ink-faint)}.project-type-icon{display:inline-flex;color:var(--ink-muted);flex-shrink:0}.dashboard-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--dashboard-space-lg)}.dashboard-heading .paper-page-title{font-size:28px;margin-bottom:var(--dashboard-space-xs)}.dashboard-heading .paper-page-lede{display:none}.dashboard-heading .btn{min-height:40px;display:inline-flex;gap:var(--dashboard-space-sm);align-items:center}.dashboard-new-mobile{display:none}.dashboard-quota{position:relative;margin:0;padding:0;border:0;background:0 0}.dashboard-quota>summary{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:5px 10px;border:1px solid var(--border-color);border-radius:6px;background:var(--paper-card);color:var(--color);font-family:var(--font-sans);font-size:12px;cursor:pointer;list-style:none;white-space:nowrap}.dashboard-quota>summary::-webkit-details-marker{display:none}.dashboard-quota>summary:hover,.dashboard-quota[open]>summary{background:var(--paper-bg-alt);border-color:var(--ink-faint)}.quota-summary-label{font-weight:600}.quota-summary-value{color:var(--ink-muted);font-variant-numeric:tabular-nums}.quota-summary-ring{width:18px;height:18px;flex-shrink:0;fill:none;stroke-width:2.5}.quota-ring-track{stroke:var(--border-color)}.quota-ring-fill{stroke:var(--accent);transform:rotate(-90deg);transform-origin:50% 50%}.quota-summary-ring.quota-warn .quota-ring-fill{stroke:var(--status-progress)}.quota-summary-ring.quota-danger .quota-ring-fill{stroke:var(--status-error)}.quota-ring-unlimited{stroke:var(--accent);stroke-width:1.7}.quota-summary-chevron{width:14px;height:14px;margin-left:2px;color:var(--ink-muted);transition:transform .15s ease}.dashboard-quota[open] .quota-summary-chevron{transform:rotate(180deg)}.dashboard-quota .quota-panel{position:absolute;z-index:25;top:calc(100% + 8px);left:0;width:344px;max-width:calc(100vw - 36px);padding:16px;border:1px solid var(--border-color);border-radius:12px;background:var(--paper-card);box-shadow:0 12px 36px rgba(26,24,21,.16)}.quota-panel-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.quota-panel-heading h2{font:600 15px var(--font-sans);margin:0}.quota-panel-heading .project-close{margin:-8px -8px -8px 0}.paper-page .quota-usage{display:grid;grid-template-columns:1fr;gap:16px;margin:0;padding:0}.quota-usage .quota-item+.quota-item{padding-top:16px;border-top:1px solid var(--border-soft,var(--border-color))}.quota-usage .quota-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.quota-usage .quota-label{display:inline-flex;align-items:center;gap:8px;font:500 12px var(--font-sans);letter-spacing:0;text-transform:none;color:var(--ink-muted)}.quota-usage .quota-label .project-type-svg{width:16px;height:16px}.quota-usage .quota-value{display:flex;align-items:baseline;gap:4px;font:12px var(--font-sans);font-variant-numeric:tabular-nums;color:var(--ink-muted);margin-bottom:8px}.quota-usage .quota-value strong{font-size:20px;line-height:1.2;font-weight:600;color:var(--color)}.quota-percent,.quota-usage .quota-unlimited-tag{margin-left:auto;padding:2px 6px;border-radius:4px;background:var(--paper-bg-alt);font:11px var(--font-sans);color:var(--ink-muted);white-space:nowrap}.quota-warn>.quota-header .quota-percent{color:var(--status-progress)}.quota-danger>.quota-header .quota-percent{color:var(--status-error)}.quota-usage .quota-track{height:5px;border:0;background:var(--paper-bg-alt)}.quota-usage .quota-track .quota-fill{min-width:0;background:var(--accent)}.quota-remaining{margin:6px 0 0;color:var(--ink-muted);font-size:11px}.quota-remaining.quota-limit{color:var(--status-error)}.quota-loading{font-size:12px;color:var(--ink-muted);margin:12px 0 0}.dashboard-page .dashboard-filter-row{display:flex;align-items:center;gap:var(--dashboard-space-md);padding:0;margin:var(--dashboard-space-lg) 0 0;border:0;background:0 0}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 240px;min-width:0}.dashboard-page .dashboard-filter-row .form-control{height:40px;padding:8px 12px;font-size:13px;background:var(--paper-card)}.dashboard-page .dashboard-filter-controls{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--dashboard-space-sm)}.dashboard-extra-filters{display:flex;gap:var(--dashboard-space-sm)}.dashboard-filters-toggle{display:none}.dashboard-page .dashboard-filter-row .btn-group .btn{border:0;background:0 0;border-radius:6px;height:36px;padding:6px 10px}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--accent-soft);color:var(--accent)}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:active,.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.dashboard-page .dashboard-filter-row .dropdown-toggle{height:36px;padding:6px 10px}.dashboard-type-filter .project-type-svg{display:none}.sort-direction{width:14px;height:14px}.sort-direction.ascending{transform:rotate(180deg)}.dashboard-page .dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--dashboard-space-sm) var(--dashboard-space-md);margin:var(--dashboard-space-md) 0 0;padding:0}.dashboard-view-tabs{display:flex;align-items:center;gap:var(--dashboard-space-lg)}.dashboard-view-short{display:none}.dashboard-view-tabs button{min-height:36px;border:0;border-bottom:2px solid transparent;border-radius:0;background:0 0;font:inherit;font-size:13px;color:var(--ink-muted);padding:4px 0}.dashboard-view-tabs button[aria-pressed=true]{color:var(--color);border-bottom-color:var(--color);font-weight:600}.attention-count{padding:1px 5px;margin-left:4px;border-radius:4px;background:var(--paper-bg-alt);font-size:11px;font-variant-numeric:tabular-nums}.attention-count.has-attention{color:var(--status-error)}.dashboard-count{margin-left:auto;font-size:12px;color:var(--ink-muted)}.dashboard-active-filters{display:flex;align-items:center;flex-wrap:wrap;gap:var(--dashboard-space-sm);width:100%}.dashboard-page .filter-chip{display:inline-flex;font-family:var(--font-sans);font-size:11px;text-transform:none;letter-spacing:0;border-radius:6px}.dashboard-page .filter-chip .project-type-svg{width:12px;height:12px;margin-left:4px}.dashboard-page .filter-chip-close{min-width:24px;min-height:24px;display:inline-flex;align-items:center;justify-content:center;margin:-2px -4px -2px 2px}.dashboard-page .btn-link-inline{color:var(--ink-muted);font-size:12px}.dashboard-page .paper-table-dashboard{margin-top:var(--dashboard-space-md);border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table-dashboard .paper-table-head,.dashboard-page .paper-table-dashboard .paper-table-row{grid-template-columns:minmax(280px,3fr) 180px 72px 148px 64px;gap:var(--dashboard-space-lg);padding:8px 12px}.dashboard-page .paper-table-dashboard .paper-table-head{border-radius:0}.dashboard-page .paper-table .cell-anon{gap:var(--dashboard-space-sm)}.dashboard-page .paper-table .anon-text{flex:1}.dashboard-page .paper-table .repo-name{font-family:var(--font-sans);font-size:14px;font-weight:600}.dashboard-page .paper-table .anon-sub{display:flex;align-items:center;gap:var(--dashboard-space-sm);min-width:0}.anonymous-id{font-size:12px;font-family:var(--font-mono);color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-page .paper-table .type-badge{font-family:var(--font-sans);letter-spacing:0;font-size:11px;text-transform:none;border-radius:6px}.dashboard-page .paper-table .status-sub{font-size:12px}.dashboard-page .paper-table .cell-conf{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.dashboard-page .conf-tag .project-type-svg{width:14px;height:14px}.dashboard-row-meta{display:contents}.dashboard-page .cell-actions{gap:0;align-items:center}.copy-link-inline,.dashboard-page .btn-icon-dots,.project-close{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:6px;background:0 0;color:var(--ink-muted);padding:0;width:32px;height:32px;min-width:32px;cursor:pointer}.copy-link-inline:focus-visible,.copy-link-inline:hover,.dashboard-page .btn-icon-dots:hover,.project-close:hover{background:var(--accent-soft);color:var(--accent)}.copy-link-inline:disabled{opacity:.5;cursor:wait}.mobile-meta-icon{display:none}.project-attention-action{display:inline-block;color:var(--accent);border:0;background:0 0;padding:0;font:inherit;font-size:12px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}.project-attention-action{text-align:left}.dashboard-page .cell-status .project-attention-action{flex-basis:100%}.project-details-row{width:100%;border-bottom:1px solid var(--border-color)}.project-details{padding:var(--dashboard-space-xl);background:var(--paper-bg-alt)}.project-details-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--dashboard-space-sm)}.project-details-heading h2{font:600 16px var(--font-sans);margin:0}.project-details-list{display:grid;grid-template-columns:1fr 1fr;gap:var(--dashboard-space-md) var(--dashboard-space-xl);margin:12px 0}.project-details-list dt{font-size:12px;color:var(--ink-muted);font-weight:500;margin-bottom:4px}.project-details-list dd{margin:0;font-size:13px;overflow-wrap:anywhere}.project-details-list code{color:var(--color);font-size:12px}.project-name-form{margin-top:var(--dashboard-space-lg);padding-top:var(--dashboard-space-lg);border-top:1px solid var(--border-color)}.project-name-form label{display:block;font-size:13px;font-weight:500;margin-bottom:4px}.project-name-form p,.project-progress-help{font-size:12px;color:var(--ink-muted);margin-bottom:8px}.project-name-controls{display:flex;gap:var(--dashboard-space-sm);max-width:560px}.project-name-controls .form-control{min-width:0;font-size:14px}.project-name-controls .btn{flex-shrink:0;min-height:40px}.project-name-form .project-name-error{color:var(--status-error)}.project-details-button{min-height:44px;padding:0 8px;border:0;border-radius:6px;background:0 0;font:inherit;font-size:12px;color:var(--ink-muted);cursor:pointer}.anonymize-page .anonymize-topbar-title{font-family:var(--font-sans);font-size:28px;font-weight:600}.anonymize-topbar{padding:16px 24px}.anonymize-form-col{background:var(--paper-bg-alt)}.anonymize-form-col .paper-settings-main{padding:20px 24px}.anonymize-form-col .paper-settings-section{padding:18px}.anonymize-form-col .paper-settings-section:first-child{padding-top:18px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt);padding:12px 0}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-sans);font-size:14px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0}.anonymize-preview-col{background:var(--canvas-bg-color);padding:24px}.anonymize-preview-head{flex-wrap:wrap;gap:6px 12px;margin-bottom:16px}.anonymize-preview-body{padding:24px}.anonymize-mobile-tabs,.anonymize-preview-empty,.mobile-preview-jump{display:none}.anonymize-page .repo-access-note{font-size:12px}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:18px}.paper-settings-toc{padding:0}.paper-settings-toc-head{display:none}.paper-table .paper-table-row{padding-left:14px;padding-right:14px}}@media (max-width:767px){.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:24px}.paper-settings{padding:20px 16px 40px}.paper-settings-main .paper-settings-section{padding:16px}.anonymize-topbar{padding:12px 16px}.anonymize-topbar .paper-crumbs{display:none}.anonymize-mobile-tabs{display:flex;gap:4px;padding:8px 16px;border-bottom:1px solid var(--border-color);background:var(--paper-card)}.anonymize-mobile-tabs button{flex:1;font:inherit;font-size:13px;padding:10px;border:0;border-radius:6px;background:0 0;color:var(--ink-muted)}.anonymize-mobile-tabs button[aria-selected=true]{background:var(--accent-soft);color:var(--accent);font-weight:600}.anonymize-page:not(.mobile-preview-active) .anonymize-preview-col{display:none}.mobile-preview-active .anonymize-form-col{display:none}.mobile-preview-active .anonymize-preview-empty{display:block;padding:24px 16px;color:var(--ink-muted)}.anonymize-form-col .paper-settings-main{padding:16px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt)}.mobile-preview-jump{display:block;width:100%;min-height:44px}.anonymize-preview-col{padding:16px}.anonymize-preview-body{padding:16px}}@media (max-width:575px){.paper-settings .quota-header{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:4px 8px}}@media (max-width:1100px) and (min-width:901px){.dashboard-page .dashboard-filter-row{flex-wrap:wrap}.dashboard-page .dashboard-filter-row .search-wrap{flex-basis:100%}.dashboard-page .dashboard-filter-controls{width:100%;justify-content:space-between}}@media (max-width:900px){.dashboard-page .paper-table.paper-table-dashboard .paper-table-row{gap:4px 8px;padding:8px 12px}.dashboard-page .paper-table .cell-anon{flex:1 1 calc(100% - 96px);min-width:0}.dashboard-page .paper-table .cell-actions{flex:0 0 88px}.dashboard-row-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;order:3;width:100%}.dashboard-page .dashboard-row-meta .cell-status{flex:1 1 80px;flex-wrap:wrap;gap:2px 8px}.dashboard-page .dashboard-row-meta .cell-expires,.dashboard-page .dashboard-row-meta .cell-views{flex-shrink:0;font-size:12px}.dashboard-page .cell-expires::before,.dashboard-page .cell-views::before{content:none}.dashboard-page .mobile-meta-icon{display:inline-block;width:14px;height:14px}.dashboard-page .dashboard-row-meta .status-sub-date{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-page .dashboard-row-meta .status-sub-error,.dashboard-page .dashboard-row-meta .status-sub-warn{flex-basis:100%;white-space:normal;overflow-wrap:anywhere}.dashboard-page .dashboard-row-meta .status-sub::before{content:none}.dashboard-page .project-attention-action{min-height:44px;display:inline-flex;align-items:center}.dashboard-page .paper-table .anon-sub .commit-hash,.dashboard-page .paper-table .anon-sub .conf-tag{display:none}}@media (max-width:767px){.container.dashboard-page{padding-top:12px}.dashboard-heading .paper-page-title{font-size:24px}.dashboard-heading-actions .btn-ink{min-height:44px}.dashboard-new-label{display:none}.dashboard-new-mobile{display:inline}.dashboard-quota>summary{min-height:44px;gap:6px;padding:10px;font-size:12px;line-height:20px}.dashboard-quota .quota-panel{max-height:calc(100dvh - 184px);overflow-y:auto;overscroll-behavior:contain}.dashboard-page .dashboard-filter-row{flex-wrap:wrap;gap:8px;margin-top:12px}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 0}.dashboard-page .dashboard-filter-row .form-control{height:44px}.dashboard-page .dashboard-filters-toggle{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:8px;min-height:44px;background:0 0;border:0}.dashboard-page .dashboard-filter-controls{display:none;width:100%}.dashboard-page .dashboard-filter-controls.expanded{display:flex;flex-wrap:wrap;gap:8px}.dashboard-page .dashboard-filter-controls .btn-group{width:100%;display:flex}.dashboard-page .dashboard-filter-controls .btn-group .btn{flex:1;min-height:44px}.dashboard-extra-filters{display:flex;width:100%}.dashboard-page .dashboard-extra-filters .dropdown{flex:1;min-width:0}.dashboard-page .dashboard-extra-filters .dropdown-toggle{width:100%;height:44px}.dashboard-type-filter .type-filter-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-type-filter .project-type-svg{display:inline-block}.dashboard-page .dashboard-meta{margin-top:8px;gap:4px 8px}.dashboard-view-tabs{gap:16px}.dashboard-view-tabs button{min-width:44px;min-height:44px;font-size:12px}.dashboard-count{font-size:11px}.dashboard-count{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.dashboard-view-long{display:none}.dashboard-view-short{display:inline}.dashboard-active-filters{display:contents}.dashboard-page .filter-chip{font-size:11px;padding:0 8px;min-height:44px;gap:4px}.dashboard-page .filter-chip-close{min-width:44px;min-height:44px;margin:0}.dashboard-page .btn-link-inline{min-height:44px;font-size:12px}.dashboard-page .paper-table-dashboard{width:calc(100% + 36px);margin:8px -18px 0;border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table .repo-name{font-size:13px}.project-details{padding:16px 12px}.project-details-list{grid-template-columns:1fr;gap:12px}.project-name-controls{flex-wrap:wrap}.project-name-controls .form-control{flex-basis:100%}.project-name-controls .btn{min-height:44px}}@media (max-width:360px){.dashboard-attention-prefix{display:none}.dashboard-attention-prefix+span{text-transform:capitalize}}.ui-icon-definitions{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}.ui-icon{display:inline-block;width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;vertical-align:-3px}.ui-icon.sort-direction{width:14px;height:14px}.pr-title-row{display:flex;align-items:flex-start;gap:16px}.pr-title-row .pr-title{flex:1;min-width:0}.pr-title-row>.btn{flex-shrink:0}.ui-icon.record-type-icon{color:var(--ink-muted)}.btn .ui-icon,.dropdown-item .ui-icon{width:16px;height:16px}.btn-icon-dots .ui-icon{width:18px;height:18px}.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:28px}.paper-faq,.paper-page{padding-top:24px}.paper-page .paper-page-lede{margin-bottom:16px;overflow-wrap:anywhere}.paper-page-title{overflow-wrap:anywhere}.anonymize-page .form-control,.paper-page .form-control{min-height:40px;font-family:var(--font-sans);font-size:14px;border-radius:var(--radius-control)}.anonymize-page textarea.form-control,.paper-page textarea.form-control{height:auto}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);border-radius:var(--radius-button);gap:6px}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm,.status-bar-actions .btn{min-height:var(--button-compact-height);padding:5px 10px;font-size:13px;border-radius:6px}.anonymize-page .btn-ink,.paper-page .btn-ink{min-height:40px;padding:9px 15px}.btn-hero>i,.btn>.project-type-svg,.btn>.ui-icon,.btn>i{width:16px;height:16px;margin:0!important;flex-shrink:0}.btn.dropdown-toggle::after{margin-left:0}.btn.disabled,.btn:disabled{cursor:not-allowed}.btn.disabled:hover,.btn:disabled:hover{filter:none}.paper-page .btn.btn-link{background:0 0;border-color:transparent}.auth-continue.btn{min-height:44px;padding:11px 16px!important}.anonymize-page .btn.btn-icon,.paper-page .btn.btn-icon{width:32px;height:32px;min-width:32px;min-height:32px;padding:0}.paper-page .btn.btn-icon-dots{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;min-width:32px;min-height:32px;padding:0;border:0;background:0 0;color:var(--ink-muted)}.paper-page .btn-icon-dots:hover{background:var(--accent-soft);color:var(--accent)}.paper-page .btn-group .btn-primary:active,.paper-page .btn-group .btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.paper-page .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0;margin-bottom:12px}.paper-page .paper-field-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0}.paper-tabs .paper-tab{min-height:44px}.paper-pill,.status-pill{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-meta-rule{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;gap:12px 24px}.paper-meta-rule b:not(.commit-hash){font-family:var(--font-sans);font-weight:500}.connections-grid{gap:16px}.connections-grid>section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px}.connections-heading{margin-bottom:24px}.claim-page .claim-form,.status-page>.paper-settings-section{padding:20px;margin-top:24px;border:1px solid var(--border-color);border-radius:var(--radius-surface);background:var(--paper-card)}.claim-page .claim-form{max-width:640px}.status-page .anonymize-submit-bar{background:0 0;gap:8px;flex-wrap:wrap}.anonymize-landing{padding-top:32px}.paper-settings .quota-usage{grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}.paper-settings .quota-usage .quota-item+.quota-item{padding-top:0;border-top:0;padding-left:16px;border-left:1px solid var(--border-color)}.paper-settings .quota-usage .quota-header{flex-direction:row;align-items:center;flex-wrap:wrap}.paper-settings .quota-usage .quota-value{white-space:normal;flex-wrap:wrap}.paper-faq-hero{padding-bottom:24px;margin-bottom:24px}.paper-faq-eyebrow,.paper-faq-toc-head{font-family:var(--font-sans);font-size:12px;text-transform:none;letter-spacing:0;margin-bottom:8px}.paper-faq-title{font:600 28px/1.2 var(--font-sans);letter-spacing:-.025em;max-width:720px;margin-bottom:12px}.paper-faq-title em{font-style:normal}.paper-faq-lede{font-size:14px}.paper-faq-body{grid-template-columns:180px minmax(0,1fr);gap:40px}.faq-section h4.faq-cat{font:600 18px/1.4 var(--font-sans);padding-bottom:12px}.faq-section h4.faq-cat .ui-icon{display:none}.faq-section .panel-group{margin-bottom:32px}.faq-section .panel-default .panel-title a{font:500 15px/1.5 var(--font-sans);padding:16px 0 16px 28px;min-height:44px}.faq-section .panel-default .panel-title a:after{top:16px}.paper-empty-title{font:600 32px/1.2 var(--font-sans);letter-spacing:-.025em}.paper-empty-title em{font-style:normal}.btn-hero{justify-content:center;gap:8px;min-height:48px;padding:13px 20px;font-size:15px;line-height:20px;background:var(--accent);border-color:var(--accent);color:#fff;border-radius:var(--radius-button)}.dark-mode .btn-hero{color:#1a1815}.btn-hero:hover{background:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .btn-hero:hover{color:#1a1815}.paper-table:not(.paper-table-dashboard){border-left:0;border-right:0;border-radius:0}.paper-table:not(.paper-table-dashboard) .paper-table-head{border-radius:0}.paper-table .cell-anon{gap:8px}.paper-table .cell-anon .anon-text{flex:1}.paper-table-conferences .cell-anon .repo-name{font-family:var(--font-sans);font-weight:600}.paper-table .anon-sub>a,.paper-table .anon-sub>span{min-width:0;overflow:hidden;text-overflow:ellipsis}.paper-table .anon-sub .ui-icon{width:14px;height:14px}.paper-page .filter-chip{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-page .filter-chip-close .ui-icon{width:12px;height:12px}.admin-nav{gap:4px;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 8px;background:0 0}.admin-nav a{font-family:var(--font-sans);font-size:13px;letter-spacing:0;text-transform:none;border-radius:6px;min-height:40px;padding:8px 12px}.admin-nav a.active{background:var(--accent-soft);color:var(--accent)}.admin-nav .ui-icon{width:16px;height:16px}.admin-filter-toolbar{background:0 0;border:0;padding:0}.admin-filter-inline>label,.admin-filter-inline>span{font-family:var(--font-sans);text-transform:none;letter-spacing:0}.admin-summary .summary-total{font-family:var(--font-sans);font-size:18px;font-weight:600}.admin-summary .summary-pill{font:500 13px/20px var(--font-sans);min-height:32px;padding:5px 10px;border-radius:6px}.admin-summary .summary-pill.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.admin-summary .summary-pill .count{font-family:var(--font-sans)}.admin-active-chip{font-family:var(--font-sans);font-size:12px}.admin-active-chip button .ui-icon{width:12px;height:12px}.user-detail-card .user-header h2{font:600 20px/1.4 var(--font-sans)}.errors-page .errors-toolbar .select-wrap label,.errors-page .volume-head,.overview-page .ov-panel-meta,.paper-detail-grid .detail-label,.paper-progress .paper-progress-label,.status-page .paper-error-eyebrow,.user-detail-grid .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-chart-title,.overview-page .ov-panel-title,.paper-error-title{font:600 16px/1.4 var(--font-sans)}.paper-error-head>.ui-icon,.paper-ratelimit-head>.ui-icon{margin-top:3px;color:var(--status-error)}.paper-ratelimit-head>.ui-icon{color:var(--status-progress)}.errors-page .seg-tabs{border-radius:var(--radius-control)}.errors-page .seg-tabs button{min-height:36px;padding:7px 12px;font:500 14px/20px var(--font-sans)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.errors-page .errors-list,.errors-page .kpi-card:hover,.errors-page .volume-chart,.overview-page .ov-chart-card,.overview-page .ov-panel-card{box-shadow:none}.errors-page .kpi-value,.overview-page .ov-daily-value,.overview-page .ov-kpi-value,.q-card-count,.user-hero-name{font-family:var(--font-sans);font-size:28px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.errors-page .kpi-label,.overview-page .ov-daily-label,.overview-page .ov-kpi-label,.q-card-name,.q-section-label,.user-hero-details .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-daily-card{background:var(--paper-card);box-shadow:none;border-radius:var(--radius-surface)}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--accent)}.errors-page .kpi-card,.overview-page .ov-kpi-card{box-shadow:none;border-radius:var(--radius-surface)}.q-card{border-radius:var(--radius-surface)}.q-card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.q-range-btns{border-radius:var(--radius-control)}.q-job-detail-actions .btn,.q-range-btns .btn{font-family:var(--font-sans);font-size:13px}.q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}@media (max-width:900px){.paper-settings .quota-usage{grid-template-columns:1fr;gap:16px}.paper-settings .quota-usage .quota-item+.quota-item{padding-left:0;border-left:0;border-top:1px solid var(--border-color);padding-top:16px}.paper-table:not(.paper-table-dashboard) .paper-table-row{gap:4px 8px!important;padding:8px 12px}.paper-table:not(.paper-table-dashboard) .cell-anon{flex:1 1 calc(100% - 52px);order:1}.paper-table:not(.paper-table-dashboard) .cell-actions{order:2;flex:0 0 44px}.paper-table .admin-users-row>[role=cell]:first-child,.paper-table.paper-table-repos.has-bulk .paper-table-row>[role=cell]:first-child{flex:0 0 24px;order:0}.paper-table .admin-users-row .cell-anon,.paper-table.paper-table-repos.has-bulk .cell-anon{flex-basis:calc(100% - 84px)}.paper-table:not(.paper-table-dashboard) .cell-anon .anon-sub{font-size:12px;gap:6px}.paper-table:not(.paper-table-dashboard) .cell-status .status-sub{font-size:12px}.paper-table .cell-expires::before,.paper-table .cell-views::before{content:none}.paper-table .cell-expires .mobile-meta-icon,.paper-table .cell-views .mobile-meta-icon{display:inline-block;width:14px;height:14px}.paper-faq-body{grid-template-columns:1fr;gap:24px}}@media (max-width:767px){.paper-faq,.paper-page{padding-top:20px}.paper-settings .paper-account-email .btn[type=submit]{min-height:40px;padding:9px 18px}.anonymize-page .paper-page-title,.paper-faq-title,.paper-page .paper-page-title,.paper-page.admin-page .paper-page-title{font-size:24px}.anonymize-page .form-control,.paper-page .form-control{min-height:44px}.anonymize-page .btn,.connection-link,.draft-discard,.paper-faq-toc a,.paper-page .btn,.paper-settings-toc nav a{min-height:44px}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:44px;padding:11px 14px;font-size:14px;line-height:20px;white-space:normal}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm{min-height:44px;padding:11px 12px;font-size:14px}.anonymize-page .btn.btn-icon,.copy-link-inline,.paper-page .btn.btn-icon,.paper-page .btn.btn-icon-dots,.project-close{width:44px;height:44px;min-width:44px;min-height:44px;padding:0}.dashboard-page .dashboard-filter-row .btn-group .btn,.dashboard-page .dashboard-filter-row .dropdown-toggle{height:auto;min-height:44px;font-size:14px;padding:11px 10px}.dashboard-heading-actions .btn-ink{padding:11px 16px}.dashboard-page .dashboard-filters-toggle{padding:11px 10px}.errors-page .btn-icon,.pr-title-row .btn,.status-bar-actions .btn{min-width:44px;min-height:44px;padding:0}.status-bar-actions .btn{width:44px;height:44px}.errors-page .seg-tabs button,.paper-tab{min-height:44px}.errors-page .seg-tabs button{padding:11px 12px}.status-bar-actions{flex-wrap:wrap;max-width:100%}.leftCol-close,.tree-search-clear{min-width:44px;min-height:44px}.anonymize-landing{padding:20px 18px}.anonymize-landing .repo-access-switch button,.source-url-label-row .repo-access-switch button{min-height:44px;padding:11px 10px;font-size:13px}.paper-settings-body{margin-top:16px;padding-top:0;gap:16px}.paper-settings-toc nav{gap:0 12px}.paper-settings-toc nav a{display:inline-flex;align-items:center}.paper-faq{padding-left:18px;padding-right:18px}.paper-faq-toc nav{display:flex;flex-direction:row;flex-wrap:wrap;gap:0 16px}.paper-faq-toc a{display:inline-flex;align-items:center;padding:8px 0;border-left:0;border-bottom:2px solid transparent;margin-left:0}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{border-bottom-color:var(--accent);color:var(--accent)}.claim-page .claim-form,.status-page>.paper-settings-section{padding:16px;margin-top:16px}.admin-nav{flex-direction:row;flex-wrap:nowrap;overflow-x:auto;gap:4px;max-width:100%;margin:8px 0 16px}.admin-nav a{flex-shrink:0;min-height:44px}.admin-summary .summary-pill{min-height:44px;padding:11px 12px;font-size:14px}.admin-active-chip button{min-width:44px;min-height:44px}.admin-filter-row{gap:8px}.admin-filter-row .admin-filter-inline{gap:8px;flex-wrap:wrap}.errors-page .kpi-grid{grid-template-columns:1fr 1fr;gap:12px}.q-cards{flex-direction:row}.q-card{min-width:130px}.q-header-actions{flex-wrap:wrap;gap:8px}}.paper-page.container:not(.auth-page){max-width:1180px}.paper-page>.row{margin-left:0;margin-right:0}.paper-page>.row>.w-100,.paper-page>.row>[class*=col]{padding-left:0;padding-right:0}.anonymize-landing{align-items:flex-start}.status-page .paper-support-grid{margin-bottom:0}.explorer-content .ace_editor{font-family:var(--font-mono);line-height:1.6}.dark-mode .explorer-content .ace-nord-dark,.dark-mode .explorer-content .ace-nord-dark .ace_gutter{background:var(--main-bg-color)}.explorer-content .file-content.markdown-body{max-width:960px;padding:32px 40px 96px}.leftCol-project-header .project-name{white-space:normal;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.file-error{font-size:inherit;font-weight:inherit;text-align:left}.file-error-card{width:100%;max-width:520px;margin-top:0}.file-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.file-error-actions{display:flex;gap:8px;margin-top:16px}.file-error .paper-empty-title{font-size:20px;text-align:center}@media (min-width:992px){.leftCol-foot{padding-bottom:72px}}.explorer-content .ace-chrome,.explorer-content .ace-chrome .ace_gutter{background:var(--main-bg-color)}@media (max-width:991px){.explorer-content .file-content.markdown-body{padding:20px 16px 96px}.anonymize-landing{padding:20px 18px}.anonymize-landing-inner{padding:0}.paper-faq-toc nav,.paper-settings-toc nav{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.paper-faq-toc nav a,.paper-settings-toc nav a{flex-shrink:0;white-space:nowrap}.paper-faq-body,.paper-settings-body{grid-template-columns:minmax(0,1fr)}.paper-faq-toc,.paper-settings-toc{position:static}.paper-faq-toc nav,.paper-settings-toc nav{display:flex;flex-direction:row;gap:0 16px}.paper-faq-toc nav a,.paper-settings-toc nav a{display:inline-flex;align-items:center;padding:8px 0;margin-left:0;border-left:0;border-bottom:2px solid transparent}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover,.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--accent)}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{justify-content:flex-start;gap:6px}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle::after{margin-left:auto}}@media (max-width:480px){.paper-page .paper-page-lede{display:block;-webkit-line-clamp:unset;overflow:visible}}.navbar .btn-signin,.navbar .btn-signin:hover{background:var(--accent);border-color:var(--accent);color:#fff!important}.dark-mode .navbar .btn-signin,.dark-mode .navbar .btn-signin:hover{color:#1a1815!important}.navbar .btn-signin:hover{filter:brightness(.94)}.paper-progress .paper-progress-bar,.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--accent)}.paper-progress .paper-progress-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-error-eyebrow,.paper-support-card .paper-support-eyebrow{font-family:var(--font-sans);font-size:12px;font-weight:500;letter-spacing:0;text-transform:none}.leftCol-foot .last-update{font-family:var(--font-sans);font-size:11px;letter-spacing:0}.paper-proof-venues span{font-family:var(--font-sans);font-size:18px;font-weight:600;letter-spacing:.02em;color:var(--ink-soft)}.markdown-body mark.redaction{background:var(--accent-soft);color:var(--accent);border-radius:3px;padding:0 2px}.ace_marker-layer .ace_redaction{position:absolute;background:var(--accent-soft);border-radius:3px}.leftCol-project-header{flex-wrap:wrap;row-gap:2px}.project-expiry{flex:1 0 100%;display:flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.project-expiry .ui-icon{width:12px;height:12px}.status-bar-actions .btn-icon-only{width:32px;padding:0;justify-content:center}.share-link-row{display:flex;gap:8px;margin-top:4px}.share-link-input{flex:1;min-width:0;font-family:var(--font-mono);font-size:14px;background:var(--paper-bg-alt)}.share-link-row .btn{flex-shrink:0;display:inline-flex;align-items:center;gap:6px;min-width:112px;justify-content:center}.share-link-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.share-link-actions .btn{display:inline-flex;align-items:center;gap:6px}.status-page .paper-support-grid{gap:0 32px}.status-page .paper-support-card{padding:16px 0 0;border:0;border-top:1px solid var(--border-color);border-radius:0;background:0 0}.status-page .paper-support-card:hover{border-color:var(--color)}@media (min-width:992px){.paper-table .cell-expires{white-space:nowrap}}.paper-settings .paper-settings-main .paper-settings-section{background:0 0;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 28px;margin-bottom:28px}.paper-settings .paper-settings-main .paper-settings-section:last-of-type{border-bottom:0}@media (max-width:991px){.paper-settings .paper-settings-main .paper-settings-section{padding:0 0 20px;margin-bottom:20px}.share-link-row{flex-direction:column}.share-link-actions{flex-direction:column}.share-link-actions .btn{justify-content:center}.status-page .paper-support-grid{row-gap:20px}}.paper-page .q-range-btns{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card);overflow:visible}.paper-page .q-range-btns .btn,.paper-page .q-range-btns .btn+.btn{min-height:0;height:28px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.paper-page .q-range-btns .btn:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}.q-header-actions>.btn{height:34px;min-height:34px}.paper-page .btn.btn-danger-soft{background:0 0;border-color:var(--status-error);color:var(--status-error)}.paper-page .btn.btn-danger-soft:hover{background:var(--status-error-soft-hover);border-color:var(--status-error);color:var(--status-error)}.q-auto-refresh,.q-section-label,.q-state-chip{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.q-state-chip{font-size:12px;text-transform:capitalize}.overview-page .ov-ebar-fill{display:block}.paper-table .paper-table-row.repo-error{border-left:0;box-shadow:inset 2px 0 0 var(--status-error);padding-left:16px}.admin-page .q-table th,.admin-page .type-badge,.admin-page .user-detail-section h2,.admin-page section>h2,.admin-page th,.admin-page>h2,.errors-page .col-count,.errors-page .col-mod,.errors-page .col-msg,.errors-page .col-sev,.errors-page .col-status,.errors-page .col-when,.overview-page .ov-chart-legend,.overview-page .ov-ebar-label,.overview-page .ov-route-n,.overview-page .ov-route-name,.q-card-sub,.q-delay-hint,.q-legend-completed,.q-legend-exec,.q-legend-failed,.q-section-right,.q-stat-label,.user-detail-grid .detail-label{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.admin-page th,.errors-page [class^=col-]{font-size:12px;font-weight:500;color:var(--ink-muted)}.q-card-sub,.q-stat-label,.user-detail-grid .detail-label{font-size:12px}.q-stat-value{font-family:var(--font-sans);font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}.q-state-badge{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:capitalize}.admin-page .type-badge{font-size:12px;text-transform:none}.errors-page .col-sev span,.errors-page .sev-label{text-transform:capitalize}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--color)}.dark-mode .overview-page .ov-spark-fill-alt,.dark-mode .overview-page .ov-spark-fill-new-user,.dark-mode .overview-page .ov-spark-fill-user,.overview-page .ov-spark-fill-alt,.overview-page .ov-spark-fill-new-user,.overview-page .ov-spark-fill-user{background:var(--accent)}.dark-mode .overview-page .ov-dot-new-user-fill,.dark-mode .overview-page .ov-dot-ok-fill,.dark-mode .overview-page .ov-dot-user-fill,.overview-page .ov-dot-new-user-fill,.overview-page .ov-dot-ok-fill,.overview-page .ov-dot-user-fill{background:var(--accent)}.errors-page .seg-tabs{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card)}.errors-page .seg-tabs button,.errors-page .seg-tabs button+button{min-height:0;height:30px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.errors-page .seg-tabs button:hover{background:var(--hover-bg-color);color:var(--color)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.user-detail-card .user-header .status-dot-wrap{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:400;color:var(--ink-soft)}.user-detail-card .user-actions{display:flex;flex-wrap:wrap;gap:8px}.admin-page .paper-table .cell-anon .anon-sub{flex-wrap:wrap;row-gap:2px}.admin-page .paper-table .anon-sub>a,.admin-page .paper-table .anon-sub>span{flex:0 1 auto;max-width:100%;white-space:nowrap}.admin-page .paper-table .cell-views .mobile-meta-icon{margin-right:4px}.q-jobs{overflow-x:auto}.q-job-detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.admin-section-header h2{font-family:var(--font-sans);font-size:16px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--color)}.errors-page .sev-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0}.email-prompt{width:min(560px,calc(100vw - 32px));padding:28px;border:1px solid var(--paper-border,#e5e1d9);border-radius:12px;background:var(--paper-bg,#faf9f6);color:inherit;box-shadow:0 16px 64px #0003}.email-prompt::backdrop{background:#0006}.email-prompt h2{margin:0 0 12px;font-size:24px}.email-prompt p{margin-bottom:20px}.email-prompt-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;margin-top:24px}body.dark-mode .email-prompt{background:#242320;color:#faf9f6}.file-error .viewer-error{width:100%;max-width:65ch;padding:2rem 1rem;overflow-wrap:anywhere;font-size:1rem;font-weight:400;text-align:left}.viewer-error .paper-empty-title{margin-bottom:1rem}.viewer-error p{line-height:1.6}.viewer-error .paper-error-actions{display:flex;flex-wrap:wrap;gap:.75rem}.markdown-body .markdown-alert{margin:1rem 0;padding:.5rem 1rem;border-left:4px solid var(--alert-color,#0969da)}.markdown-body .markdown-alert-note{--alert-color:#0969da}.markdown-body .markdown-alert-tip{--alert-color:#1a7f37}.markdown-body .markdown-alert-important{--alert-color:#8250df}.markdown-body .markdown-alert-warning{--alert-color:#9a6700}.markdown-body .markdown-alert-caution{--alert-color:#cf222e}.markdown-body .markdown-alert-title{color:var(--alert-color);font-weight:600;display:flex;align-items:center;gap:.5rem}.markdown-body .markdown-alert-title svg{fill:currentColor;flex-shrink:0}.markdown-body .markdown-alert>:last-child{margin-bottom:0}body.dark-mode .markdown-alert-note{--alert-color:#79c0ff}body.dark-mode .markdown-alert-tip{--alert-color:#7ee787}body.dark-mode .markdown-alert-important{--alert-color:#d2a8ff}body.dark-mode .markdown-alert-warning{--alert-color:#e3b341}body.dark-mode .markdown-alert-caution{--alert-color:#ff7b72}.markdown-body .emoji{display:inline;vertical-align:text-bottom}.markdown-body .footnotes{margin-top:2rem;border-top:1px solid var(--border-color,#d0d7de);padding-top:1rem;font-size:.875em}.markdown-body .katex-display{overflow-x:auto;overflow-y:hidden;padding:.25rem 0}.markdown-body .markdown-diagram{margin:1rem 0;border:1px solid var(--border-color,#d0d7de);padding:.75rem}.markdown-body .markdown-diagram svg{display:block;width:100%;max-height:360px}.markdown-body .markdown-diagram path{fill:#a7b2ff;fill-opacity:.5;stroke:var(--link-color,#3b4ad6);stroke-width:1;vector-effect:non-scaling-stroke}.markdown-body .diagram-controls{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}.markdown-body .diagram-controls button{min-width:44px;min-height:44px;padding:.25rem .75rem;border:1px solid var(--border-color,#d0d7de);background:var(--main-bg-color,#fff);color:inherit;border-radius:4px}.markdown-body .diagram-controls button:hover{background:var(--hover-bg-color,#f6f8fa)}.markdown-body .diagram-controls button:focus-visible{outline:2px solid var(--link-color,#0969da);outline-offset:2px}.markdown-body .hljs-keyword,.markdown-body .hljs-selector-tag{color:#cf222e}.markdown-body .hljs-attr,.markdown-body .hljs-string{color:#0a3069}.markdown-body .hljs-literal,.markdown-body .hljs-number,.markdown-body .hljs-title{color:#8250df}.markdown-body .hljs-comment{color:#57606a}body.dark-mode .markdown-body .hljs-keyword{color:#ff7b72}body.dark-mode .markdown-body .hljs-attr,body.dark-mode .markdown-body .hljs-string{color:#a5d6ff}body.dark-mode .markdown-body .hljs-literal,body.dark-mode .markdown-body .hljs-number,body.dark-mode .markdown-body .hljs-title{color:#d2a8ff}body.dark-mode .markdown-body .hljs-comment{color:#b1bac4}body.dark-mode .markdown-body .gh-light-mode-only,body:not(.dark-mode) .markdown-body .gh-dark-mode-only{display:none} \ No newline at end of file + */.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-brands-400.eot);src:url(../fonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-brands-400.woff2) format("woff2"),url(../fonts/fa-brands-400.woff) format("woff"),url(../fonts/fa-brands-400.ttf) format("truetype"),url(../fonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:'Font Awesome 5 Brands';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-regular-400.eot);src:url(../fonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-regular-400.woff2) format("woff2"),url(../fonts/fa-regular-400.woff) format("woff"),url(../fonts/fa-regular-400.ttf) format("truetype"),url(../fonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:'Font Awesome 5 Free';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;font-display:block;src:url(../fonts/fa-solid-900.eot);src:url(../fonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-solid-900.woff2) format("woff2"),url(../fonts/fa-solid-900.woff) format("woff"),url(../fonts/fa-solid-900.ttf) format("truetype"),url(../fonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:'Font Awesome 5 Free';font-weight:900}.nb-notebook{line-height:1.5}.nb-stderr,.nb-stdout{white-space:pre-wrap;margin:1em 0;padding:.1em .5em}.nb-stderr{background-color:#faa}.nb-cell+.nb-cell{margin-top:.5em}.nb-output table{border:1px solid #000;border-collapse:collapse}.nb-output th{font-weight:700}.nb-output td,.nb-output th{border:1px solid #000;padding:.25em;text-align:left;vertical-align:middle;border-collapse:collapse}.nb-notebook blockquote{border-left:5px solid #ccc;margin-left:0;padding-left:1em}.nb-cell{position:relative}.nb-raw-cell{white-space:pre-wrap;background-color:#f5f2f0;font-family:Consolas,Monaco,'Andale Mono',monospace;padding:1em;margin:.5em 0}.nb-output{min-height:1em;width:100%;overflow-x:scroll;border-right:1px dotted #ccc}.nb-output img{max-width:100%}.nb-input:before,.nb-output:before{position:absolute;font-family:monospace;color:#999;left:-7.5em;width:7em;text-align:right}.nb-input:before{content:"In [" attr(data-prompt-number) "]:"}.nb-output:before{content:"Out [" attr(data-prompt-number) "]:"}// Fix pandas dataframe formatting div[style="max-height:1000px;max-width:1500px;overflow:auto;"]{max-height:none!important}@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,math,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.18.10"}.katex .katex-mathml{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.katex-newline{display:block}.katex .katex-base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .katex-base,.katex .katex-strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .katex-vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .katex-thinbox{display:inline-flex;flex-direction:row;max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .katex-hdashline,.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-rule,.katex .katex-underline .underline-line,.katex .mfrac .frac-line{min-height:1px}.katex .mspace{display:inline-block}.katex .katex-smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.katex-inner,.katex .llap>.katex-inner,.katex .rlap>.katex-inner{position:absolute}.katex .clap>.katex-fix,.katex .llap>.katex-fix,.katex .rlap>.katex-fix{display:inline-block}.katex .llap>.katex-inner{right:0}.katex .clap>.katex-inner,.katex .rlap>.katex-inner{left:0}.katex .clap>.katex-inner>span{margin-left:-50%;margin-right:50%}.katex .katex-rule{border:0 solid;display:inline-block;position:relative}.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .katex-hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.katex-root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .katex-sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .katex-sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .katex-sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .katex-sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .katex-sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .katex-sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .katex-sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .katex-sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .katex-sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .katex-sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .katex-sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .katex-sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .katex-sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .katex-sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .katex-sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .katex-sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .katex-sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .katex-sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .katex-sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .katex-sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .katex-sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .katex-sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .katex-sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .katex-sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .katex-sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .katex-sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .katex-sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .katex-sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .katex-sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .katex-sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .katex-sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .katex-sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .katex-sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .katex-sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .katex-sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .katex-sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .katex-sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .katex-sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .katex-sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .katex-sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .katex-sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .katex-sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .katex-sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .katex-sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .katex-sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .katex-sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .katex-sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .katex-sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .katex-sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .katex-sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .katex-sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .katex-sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .katex-sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .katex-sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .katex-sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .katex-sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .katex-sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .katex-sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .katex-sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .katex-sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .katex-sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .katex-sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .katex-sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .katex-sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .katex-sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .katex-sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .katex-sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .katex-sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .katex-sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .katex-sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .katex-sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .katex-sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .katex-sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .katex-sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .katex-sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .katex-sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .katex-sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .katex-sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .katex-sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .katex-sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .katex-sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .katex-sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .katex-sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .katex-sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .katex-sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .katex-sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .katex-sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .katex-sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .katex-sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .katex-sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .katex-sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .katex-sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .katex-sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .katex-sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .katex-sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .katex-sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .katex-sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .katex-sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .katex-sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .katex-sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .katex-sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .katex-sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .katex-sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .katex-sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .katex-sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .katex-sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .katex-sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .katex-sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .katex-sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .katex-sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .katex-sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .katex-sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .katex-sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .katex-sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .katex-sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .katex-sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .katex-sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .katex-sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .katex-sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .katex-sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .katex-sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .katex-accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .katex-accent .accent-body{position:relative}.katex .katex-accent .accent-body:not(.accent-full){width:0}.katex .katex-overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .katex-stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .katex-stretchy:after,.katex .katex-stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .katex-sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .reflectbox{display:inline-block;transform:scaleX(-1)}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.katex-tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.katex-tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.mermaid{text-align:center;margin:1em 0;overflow:auto}.mermaid svg{max-width:100%;height:auto}.dark-mode .mermaid{filter:invert(1) hue-rotate(180deg)}.dark-mode .mermaid svg{background:0 0}.dark-mode .mermaid .edgeLabel,.dark-mode .mermaid .nodeLabel{filter:invert(1) hue-rotate(180deg)}.mermaid .node circle,.mermaid .node ellipse,.mermaid .node polygon,.mermaid .node rect{stroke-width:2px}.mermaid .flowchart-link{stroke-width:2px}.mermaid .actor{fill:#f9f9f9;stroke:#333;stroke-width:2px}.mermaid .messageLine0,.mermaid .messageLine1{stroke:#333;stroke-width:1.5px}.mermaid .section0,.mermaid .section1,.mermaid .section2,.mermaid .section3{opacity:.8}.mermaid .pieChart .slice{opacity:.9}.markdown-body .mermaid{background:0 0;border:none;padding:10px}.mermaid .error{color:#d32f2f;font-family:monospace;font-size:12px;padding:10px;border:1px solid #d32f2f;border-radius:4px;background-color:#ffebee}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff')}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.5;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{color:#fafbfc;background-color:#b31d28}.markdown-body .pl-c2{color:#fafbfc;background-color:#d73a49}.markdown-body .pl-c2::before{content:"^M"}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#22863a}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#005cc5}.markdown-body .pl-mi{font-style:italic;color:#24292e}.markdown-body .pl-mb{font-weight:700;color:#24292e}.markdown-body .pl-md{color:#b31d28;background-color:#ffeef0}.markdown-body .pl-mi1{color:#22863a;background-color:#f0fff4}.markdown-body .pl-mc{color:#e36209;background-color:#ffebda}.markdown-body .pl-mi2{color:#f6f8fa;background-color:#005cc5}.markdown-body .pl-mdr{font-weight:700;color:#6f42c1}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{text-decoration:underline;color:#032f62}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit}.markdown-body strong{font-weight:bolder}.markdown-body h1{font-size:2em;margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body hr{box-sizing:content-box;height:0;overflow:visible}.markdown-body input{font:inherit;margin:0}.markdown-body input{overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:0 0;border:0;border-bottom:1px solid #dfe2e5}.markdown-body hr::before{display:table;content:""}.markdown-body hr::after{display:table;clear:both;content:""}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}.markdown-body .octicon{vertical-align:text-bottom}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:0}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{padding-bottom:.3em;font-size:2em;border-bottom:1px solid #eaecef}.markdown-body h2{padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#6a737d}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body code{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.dark-mode{--canvas-bg-color:#1B1916;--sidebar-bg-color:#1A1918;--main-bg-color:#1B1916;--header-bg-color:#1A1918;--hover-bg-color:rgba(255, 255, 255, 0.05);--header-color:#FAF9F6;--color:#D6D1C5;--link-color:#A7B2FF;--link-hover-color:#C8CEFF;--border-color:#33302B;--border-soft:#2A2825;--btn-color:#FAF9F6;--input-color:#E6E1D8;--input-bg:#25231F;--primary-bg:#FAF9F6;--primary-hover-bg:#FFFFFF;--primary-color:#1A1815;--primary-active-color:#1A1815;--accent:#A7B2FF;--accent-soft:rgba(167, 178, 255, 0.12);--ink-muted:#A39D92;--ink-faint:#8A857C;--ink-soft:#B5AFA2;--status-ready:#5FB27A;--status-progress:#E0A94A;--status-error:#F08A82;--status-inactive:#8A857C;--status-error-soft:rgba(240, 138, 130, 0.08);--status-error-soft-hover:rgba(240, 138, 130, 0.14);--admin-nav-bg:#1A1918;--admin-nav-active:rgba(167, 178, 255, 0.12);--admin-stat-bg:#25231F;--paper-card:#25231F;--paper-bg-alt:#201E1B;--highlight:#3A341E;background-color:var(--canvas-bg-color);color:var(--color)}body{--canvas-bg-color:#FAF9F6;--sidebar-bg-color:#FFFFFF;--header-bg-color:#FAF9F6;--header-color:#1A1815;--main-bg-color:#FAF9F6;--hover-bg-color:rgba(26, 24, 21, 0.05);--input-color:#1A1815;--color:#1A1815;--link-color:#3B4AD6;--link-hover-color:#2E3BB8;--border-color:#E6E1D8;--border-soft:#EDE9E1;--btn-color:#1A1815;--input-bg:#FFFFFF;--primary-bg:#1A1815;--primary-hover-bg:#000000;--primary-color:#FAF9F6;--primary-active-color:#FAF9F6;--accent:#3B4AD6;--accent-soft:#EEF0FF;--ink-muted:#6F6A61;--ink-faint:#8A857C;--ink-soft:#4A4641;--paper-bg-alt:#F3F1EC;--paper-card:#FFFFFF;--highlight:#FFF3C4;--status-ready:#2F7A44;--status-progress:#946512;--status-error:#B42318;--status-inactive:#8A857C;--status-error-soft:rgba(180, 35, 24, 0.04);--status-error-soft-hover:rgba(180, 35, 24, 0.08);--radius-control:6px;--radius-button:8px;--button-height:36px;--button-font-size:14px;--button-line-height:20px;--button-padding-x:13px;--button-compact-height:32px;--radius-surface:10px;--font-serif:'Instrument Serif','Iowan Old Style',Georgia,serif;--font-sans:'Inter',ui-sans-serif,system-ui,-apple-system,sans-serif;--font-mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;background-color:var(--canvas-bg-color);color:var(--color);font-family:var(--font-sans);font-size:14px;letter-spacing:-.005em;line-height:1.5}.fadeIn{opacity:1;animation-name:fadeInOpacity;animation-iteration-count:1;animation-timing-function:ease-in;animation-duration:.6s}@keyframes fadeInOpacity{0%{opacity:0}100%{opacity:1}}.btn:active,.btn:focus{box-shadow:none}:focus:not(:focus-visible){outline:0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn:focus-visible,.dropdown-item:focus-visible,.form-control:focus-visible{outline:2px solid var(--accent);outline-offset:2px;box-shadow:none}input:active,input:hover{box-shadow:none!important}input:-webkit-autofill,input:-webkit-autofill:focus,input:-webkit-autofill:hover,select:-webkit-autofill,select:-webkit-autofill:focus,select:-webkit-autofill:hover,textarea:-webkit-autofill,textarea:-webkit-autofill:focus,textarea:-webkit-autofill:hover{border-color:var(--border-color);-webkit-text-fill-color:var(--color);-webkit-box-shadow:none;transition:background-color 1000s ease-in-out 0s}.custom-select,.form-control,input:-internal-autofill-selected{color:var(--input-color);background-color:var(--input-bg)!important;border-color:var(--border-color)}.form-control:focus{border-color:var(--border-color)}body,html{position:relative;height:100%;overflow-x:hidden}body{overflow-y:hidden}#app{flex:1 1 auto;min-height:0}.app-header{flex:0 0 auto}.app-view{display:block;flex:1 1 auto;min-height:0;overflow-x:hidden!important;overflow-y:auto!important;max-width:100%}.markdown-body a,a{color:var(--link-color)}.markdown-body a:hover,a:hover{text-decoration:none;color:var(--link-hover-color)}.dropdown-menu a.dropdown-item{color:var(--color)}.dropdown-menu a.dropdown-item:hover{color:var(--color);text-decoration:none}.markdown-body .emoji{height:1.3em;margin:0;vertical-align:-.1em}.navbar.navbar-expand-lg{background:var(--header-bg-color)!important;border-bottom:1px solid var(--border-color);transition:background-color .5s ease;padding:10px max(20px,calc((100vw - 1200px)/ 2));font-family:var(--font-sans)}.navbar-toggler{border:1px solid var(--border-color)!important;color:var(--color)!important}.navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}.navbar .navbar-nav{align-items:center}.navbar .nav-link{display:inline-flex;align-items:center;font-size:13px;color:var(--ink-muted)!important;padding:6px 0!important;margin:0 12px;border-bottom:1px solid transparent;letter-spacing:-.005em;line-height:1}.navbar .nav-link:hover{color:var(--color)!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--color)}.navbar .nav-link.nav-icon{padding:0!important;margin:0 8px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:15px;line-height:1}.navbar #navbarSupportedContent{align-items:center}.navbar-brand{font-family:var(--font-serif)!important;font-size:20px!important;letter-spacing:-.01em;color:var(--color)!important;padding-right:18px;margin-right:12px;border-right:1px solid var(--border-color)}.navbar-brand em,.navbar-brand i{font-style:italic;font-weight:400}.navbar-dark .navbar-toggler{border-color:var(--border-color);color:var(--color)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar .btn-signin{display:inline-flex;align-items:center;height:32px;padding:0 14px!important;margin-left:6px;border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color)!important;border-radius:6px;font-size:13px;font-weight:500;line-height:1}.navbar .btn-signin:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color)!important}.navbar .nav-support{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;order:3;gap:6px;min-height:36px;margin-left:12px;padding:0 12px;border:1px solid var(--border-color);border-radius:8px;color:var(--color);font-size:13px;font-weight:500;text-decoration:none}.navbar .nav-support:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}@media (max-width:991px){.navbar .nav-support{order:0;width:44px;min-height:44px;margin:0 8px 0 auto;padding:0}.navbar .nav-support-label{display:none}[class*=floatingchat-container-wrap],iframe.floatingchat-container{display:none!important}}.navbar .user-chip{display:inline-flex!important;align-items:center;gap:8px;padding:4px 12px 4px 6px!important;margin-left:6px;border:1px solid var(--border-color);border-radius:999px;background:var(--sidebar-bg-color);font-size:13px;color:var(--color)!important}.navbar .user-chip:hover{background:var(--hover-bg-color)}.navbar .user-chip img{width:22px;height:22px}.navbar .user-chip .user-chip-name{color:var(--color);font-weight:500}.navbar .user-chip::after{color:var(--ink-muted)}#navbarSupportedContent{padding-right:0}.generalMessage{display:block;text-align:center;color:var(--header-color)}.rgba-gradient{background:var(--canvas-bg-color);color:var(--color)}.paper-landing{overflow-x:clip}.paper-wrap{max-width:1140px;margin-left:auto;margin-right:auto;padding-left:32px;padding-right:32px}.paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500}.paper-hero{max-width:1140px;margin:0 auto;padding:64px 32px 0;display:grid;grid-template-columns:.95fr 1.05fr;gap:48px;align-items:center}.paper-hero h1.hero-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.4vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:14px 0 0;color:var(--color);text-wrap:balance}.paper-hero h1 .accent{color:var(--accent);font-style:italic}.hero-subtitle{margin-top:18px;font-size:18px;line-height:1.55;color:var(--ink-soft);max-width:30em;text-wrap:pretty}.paper-cta-row{display:flex;flex-wrap:wrap;gap:18px;align-items:center;margin-top:26px}.btn-hero{display:inline-flex;align-items:center;font-family:var(--font-sans);border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control);letter-spacing:-.005em;transition:background .15s,border-color .15s,transform .1s}.btn-hero:hover{background:var(--primary-hover-bg);border-color:var(--primary-hover-bg);color:var(--canvas-bg-color);text-decoration:none;transform:translateY(-1px)}.btn-hero-ghost{background:0 0;border:1px solid var(--border-color);color:var(--color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control)}.btn-hero-ghost:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}.paper-link-arrow{font-size:14px;color:var(--ink-soft);text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--border-color)}.paper-link-arrow:hover{color:var(--color);text-decoration-color:var(--color)}.paper-reassure{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px;color:var(--ink-muted)}.paper-reassure li::before{content:"\2713";color:var(--status-ready);margin-right:6px;font-size:11px}.paper-frame{border-radius:var(--radius-surface);background:var(--paper-card);border:1px solid var(--border-color);box-shadow:0 24px 60px rgba(26,24,21,.1),0 2px 6px rgba(26,24,21,.04);overflow:hidden}.dark-mode .paper-frame{box-shadow:0 24px 60px rgba(0,0,0,.45)}.paper-frame-bar{display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;border-bottom:1px solid var(--border-soft);background:var(--paper-bg-alt);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted)}.paper-frame-bar .dots{display:flex;gap:5px}.paper-frame-bar .dots i{width:8px;height:8px;border-radius:50%;background:var(--border-color)}.paper-frame-bar .url{flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-frame img{display:block;width:100%;height:auto}.paper-hero-shot .paper-frame{width:112%}.paper-proof{margin-top:64px;padding-top:18px;padding-bottom:18px;border-top:1px solid var(--border-color);display:flex;flex-wrap:wrap;gap:12px 30px;align-items:center}.paper-proof-venues{display:flex;gap:22px;align-items:center;font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--ink-soft)}.paper-proof-venues i{font-style:normal;font-family:var(--font-sans);font-size:14px;color:var(--ink-faint)}.paper-stats{margin-top:12px;padding-top:22px;border-top:1px solid var(--border-color)}.paper-stats-meta{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:14px}.paper-stats-meta-right{display:inline-flex;align-items:center;gap:6px}.paper-stats-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--status-ready)}.paper-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color)}.paper-stat-card{display:flex;flex-direction:column;padding:22px 26px 20px 0;margin-right:26px;border-right:1px solid var(--border-color);min-width:0}.paper-stat-card:last-child{border-right:0;margin-right:0;padding-right:0}.paper-stat-value{font-size:44px;font-weight:500;letter-spacing:-.04em;line-height:1;color:var(--color);font-variant-numeric:tabular-nums}.paper-stat-label{margin-top:6px;font-size:13px;color:var(--ink-soft)}.paper-stat-bars{display:block;width:100%;height:34px;margin-top:18px;overflow:visible}.paper-stat-bars rect{fill:var(--border-color)}.paper-stat-bars rect.is-latest{fill:var(--accent)}.paper-stat-delta{margin-top:10px;font-family:var(--font-mono);font-size:11px;color:var(--status-ready)}.paper-section-head{margin-top:110px;display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:end}.paper-qa h2,.paper-section-head h2{font-family:var(--font-serif);font-weight:400;font-size:clamp(2rem,4.2vw,3.25rem);line-height:1.05;letter-spacing:-.02em;margin:10px 0 0;color:var(--color);text-wrap:balance}.paper-feature-title em,.paper-qa h2 em,.paper-section-head h2 em{font-style:italic;color:var(--accent)}.paper-section-head p{font-size:15px;color:var(--ink-soft);max-width:32em;margin:0;line-height:1.6}.paper-preview{margin-top:28px;display:grid;grid-template-columns:1fr 1fr;gap:14px}.paper-preview .pane{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);overflow:hidden;min-width:0}.paper-preview .pane-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;border-bottom:1px solid var(--border-soft)}.paper-preview .pane-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap}.paper-preview .pane-url{font-family:var(--font-mono);font-size:11px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.paper-preview .pane-body{padding:16px 18px;font-family:var(--font-mono);font-size:13px;line-height:1.9;color:var(--ink-soft)}.paper-preview .pane-body strong{color:var(--color);font-weight:600}.paper-preview .tok{color:var(--ink-faint)}.paper-preview .redact{background:var(--accent-soft);color:var(--accent);border-radius:4px;padding:0 5px}.paper-features{margin-top:28px;padding-top:28px;border-top:1px solid var(--border-color);display:grid;grid-template-columns:5fr 7fr;gap:48px;align-items:start}.paper-features-list{display:flex;flex-direction:column}.paper-feature{border-left:2px solid var(--border-soft);padding:16px 0 16px 20px;transition:border-color .2s}.paper-feature.is-on{border-left-color:var(--color)}.paper-feature-tab{all:unset;display:block;width:100%;cursor:pointer;color:inherit;border-radius:4px}.paper-feature-tab:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.paper-feature-tab .paper-eyebrow{display:block;margin-bottom:6px}.paper-feature-title{display:block;font-family:var(--font-serif);font-size:24px;line-height:1.15;letter-spacing:-.015em;color:var(--ink-muted);transition:color .2s}.paper-feature-title em{color:inherit}.paper-feature-tab:hover .paper-feature-title,.paper-feature.is-on .paper-feature-title{color:var(--color)}.paper-feature.is-on .paper-feature-title em{color:var(--accent)}.paper-feature-more{display:none}.paper-feature.is-on .paper-feature-more{display:block}.paper-feature-more .paper-feature-title-m{display:none}.paper-feature-more p{font-size:15px;color:var(--ink-soft);line-height:1.55;margin:10px 0 12px;max-width:30em}.paper-features-stage{min-width:0}.paper-feature-panel{animation:paper-feature-in .25s ease-out}@keyframes paper-feature-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.paper-feature-panel{animation:none}}.paper-crop{position:relative;height:380px;overflow:hidden;background:var(--paper-card)}.paper-crop img{position:absolute;left:0;top:0;max-width:none;height:auto;display:block}.paper-crop-anonymize img{width:150%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:160%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:150%;transform:translate(-6%,-9%)}.paper-qa{margin-top:110px;display:grid;grid-template-columns:1fr 1.4fr;gap:40px;align-items:start}.paper-qa h2{margin-bottom:12px}.paper-qa .q{border-top:1px solid var(--border-color);padding:18px 0}.paper-qa .q:last-child{border-bottom:1px solid var(--border-color)}.paper-qa .q a{display:block;font-weight:500;font-size:15px;color:var(--color);margin-bottom:6px}.paper-qa .q a:hover{color:var(--accent);text-decoration:none}.paper-qa .q p{margin:0;font-size:14px;color:var(--ink-soft);line-height:1.6}@media (max-width:1100px){.paper-hero-shot .paper-frame{width:100%}}@media (max-width:991px){.paper-hero{grid-template-columns:1fr;gap:36px;padding-top:40px}.paper-qa,.paper-section-head{grid-template-columns:1fr;gap:16px}.paper-stats-grid{grid-template-columns:1fr 1fr}.paper-stat-card:nth-child(2n){border-right:0;margin-right:0;padding-right:0}.paper-stat-card:nth-child(-n+2){border-bottom:1px solid var(--border-color)}}@media (max-width:767px){.paper-hero,.paper-wrap{padding-left:20px;padding-right:20px}.paper-hero h1.hero-title{font-size:clamp(2.4rem,11vw,3.25rem)}.hero-subtitle{font-size:16px}.paper-cta-row .btn-hero{width:100%;justify-content:center}.paper-proof{margin-top:48px}.paper-stat-card{padding:18px 16px 16px 0;margin-right:16px}.paper-stat-value{font-size:40px}.paper-qa,.paper-section-head{margin-top:72px}.paper-preview{grid-template-columns:1fr}.paper-preview .pane-body{font-size:12px;line-height:1.8}.paper-features{display:flex;flex-wrap:wrap;gap:0;padding-top:0;border-top:0;margin-top:24px}.paper-feature,.paper-features-list,.paper-features-stage{display:contents}.paper-feature-tab{order:1;flex:1 1 0;width:auto;padding:12px 0 10px;border-bottom:2px solid var(--border-color);border-radius:0;text-align:left}.paper-feature.is-on .paper-feature-tab{border-bottom-color:var(--color)}.paper-feature-tab .paper-eyebrow{margin:0;font-size:11px;letter-spacing:.08em}.paper-feature-tab .paper-feature-title{display:none}.paper-feature-panel{order:2;width:100%;margin-top:20px;animation:none}.paper-crop{height:240px}.paper-crop-anonymize img{width:230%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:240%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:220%;transform:translate(-3%,-9%)}.paper-feature-more{order:3;width:100%}.paper-feature.is-on .paper-feature-more{margin-top:18px}.paper-feature-more .paper-feature-title-m{display:block;font-size:28px;line-height:1.1}.paper-feature-more p{max-width:none}.paper-footer-inner>.paper-footer-brand{grid-column:1/-1}.paper-footer-foot{flex-direction:column;gap:6px}}.dropdown-menu{background-color:var(--paper-card,var(--main-bg-color))!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:8px!important;box-shadow:0 12px 28px rgba(26,24,21,.08),0 2px 6px rgba(26,24,21,.05)!important;padding:6px!important;font-family:var(--font-sans);font-size:13px;min-width:11rem}.dropdown-menu .dropdown-item{color:var(--color)!important;padding:7px 10px!important;border-radius:5px;font-size:13px}.dropdown-menu .dropdown-item:focus,.dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color)!important;color:var(--color)!important}.dropdown-menu .dropdown-divider{border-top-color:var(--border-color)!important;margin:4px 2px}.dropdown-menu .dropdown-header{color:var(--ink-muted);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.body,.file-content,.markdown-body{background-color:var(--main-bg-color)!important;color:var(--color)!important}.markdown-body table tr{background-color:var(--main-bg-color);border-top:1px solid var(--border-color)}.markdown-body table tr:nth-child(2n){background-color:var(--paper-bg-alt)}.markdown-body table td,.markdown-body table th{border:1px solid var(--border-color)}.file-content{padding:4px 7px;text-align:left;min-height:100%}.badge{font-size:75%;font-weight:500;padding:3px 8px;border-radius:10px;vertical-align:middle}.warning-feedback{width:100%;margin-top:.25rem;font-size:80%;color:#dc8e35}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--hover-bg-color)}.card-header .btn,.card-header .btn:focus,.card-header .btn:hover{border:none!important;background:0 0!important}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);vertical-align:middle;max-width:100%;transition:background-color 120ms ease,border-color 120ms ease,color 120ms ease;color:var(--btn-color);border:1px solid var(--border-color);background:var(--paper-card);border-radius:var(--radius-button);white-space:nowrap}.btn:active,.btn:hover{color:var(--btn-color);border:1px solid var(--border-color);background-color:var(--hover-bg-color);box-shadow:none!important}.btn.btn-primary{color:var(--primary-color);background-color:var(--primary-bg)}.btn.btn-primary:active,.btn.btn-primary:hover{color:var(--primary-active-color);background-color:var(--primary-hover-bg)!important}.btn::placeholder{color:var(--color);opacity:1}.white_border{border:1px solid #fff;color:#fff}.leftCol{display:flex;position:relative;flex:0 0 auto;width:100%;z-index:9;flex-direction:column}.card,.leftCol,.sidePanel{background-color:var(--sidebar-bg-color);border:1px solid var(--border-color)}@media (min-width:768px){.leftCol{flex:0 0 310px;width:310px;height:100%}}.leftCol-search{padding:10px 12px 0}.tree-search-box{display:flex;align-items:center;gap:8px;background:var(--canvas-bg-color);border:1px solid var(--border-color);border-radius:8px;padding:7px 10px;transition:border-color .15s}.tree-search-box:focus-within{border-color:var(--ink-muted)}.tree-search-icon{font-size:12px;color:var(--ink-muted);flex-shrink:0}.tree-search-input{flex:1;border:none;outline:0;background:0 0;font-family:var(--font-sans);font-size:13px;color:var(--color);min-width:0}.tree-search-input::placeholder{color:var(--ink-muted)}.tree-search-kbd{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:4px;padding:1px 6px;line-height:1.4;flex-shrink:0}.tree-search-clear{background:0 0;border:none;color:var(--ink-muted);font-size:16px;cursor:pointer;padding:0 2px;line-height:1}.tree-search-clear:hover{color:var(--color)}.leftCol-project-header{display:flex;align-items:baseline;justify-content:space-between;padding:12px 14px 4px;gap:8px}.project-name{font-family:var(--font-sans);font-size:13px;font-weight:600;color:var(--color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.project-file-count{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);white-space:nowrap;flex-shrink:0}.files{position:relative;display:block;overflow:auto;height:100%;padding:4px 6px}.files ul{list-style:none;margin:0;padding:0}.files li ul{padding-left:8px;margin-left:7px;border-left:1px solid var(--border-color)}.files .folder>ul{display:none}.files .folder.open>ul{display:block}.files .file,.files .folder{position:relative;color:var(--ink-soft);cursor:pointer;word-break:break-all}.files a{display:flex;align-items:center;gap:4px;padding:1px 8px 1px 2px;font-family:var(--font-sans);font-size:13px;color:var(--ink-soft);border-radius:4px;text-decoration:none;line-height:1.5;position:relative}.files a:hover{background:var(--hover-bg-color);color:var(--color);text-decoration:none}.files:focus{outline:0}.files a.tree-focused{background:var(--hover-bg-color);color:var(--color)}.files .file.active>a{background:rgba(128,128,128,.15);color:var(--color)}.files .file.active>a .tree-icon-file{color:#5b7ba5}.files .file.active>a .tree-count{color:var(--ink-muted)}.tree-icon-file,.tree-icon-folder{display:inline-block;flex-shrink:0}.tree-icon-folder{width:14px;height:12px;color:var(--ink-muted);opacity:.75}.tree-icon-folder svg{display:block;width:100%;height:100%;fill:currentColor;fill-opacity:0;stroke:currentColor;stroke-width:1.2;stroke-linejoin:round}.files .folder.open>a .tree-icon-folder{color:#a07d2e;opacity:.9}.files .folder.open>a .tree-icon-folder svg{fill-opacity:.12}.dark-mode .files .folder.open>a .tree-icon-folder{color:#c9a03a}.tree-icon-file{width:16px;font-size:14px;text-align:center;color:#5b7ba5}.dark-mode .files .file.active>a .tree-icon-file,.dark-mode .tree-icon-file{color:#7ba3d0}.tree-toggle{display:inline-flex;align-items:center;justify-content:center;width:10px;height:14px;flex-shrink:0;opacity:.6}.tree-toggle::after{content:"";display:block;width:0;height:0;border-style:solid;border-width:3px 0 3px 4.5px;border-color:transparent transparent transparent var(--ink-muted);transition:transform .12s ease}.files .folder.open>a .tree-toggle::after{transform:rotate(90deg)}.tree-spacer{display:inline-block;width:10px;flex-shrink:0}.tree-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-count{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);flex-shrink:0;margin-left:auto;padding-left:8px;opacity:.7}.files .folder>a{color:var(--color)}.files .file::before,.files .folder::before{display:none}.files .folder>a::after{display:none}.tree-search-path{color:var(--ink-muted);font-size:11px}.tree-search-empty{padding:16px 12px;color:var(--ink-muted);font-size:13px;font-family:var(--font-sans);text-align:center}.leftCol{background:var(--paper-bg-alt,#f3f1ec);border-right:1px solid var(--border-color)}.dark-mode .leftCol{background:var(--sidebar-bg-color)}.status-bar{background:var(--canvas-bg-color);border-bottom:1px solid var(--border-color);padding:10px 14px}.paths .breadcrumb-item,.paths .breadcrumb-item a{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paths .breadcrumb-item.active,.paths .breadcrumb-item:last-child{color:var(--color)}.paths .breadcrumb-item+.breadcrumb-item::before{content:'/';color:var(--ink-muted)}.last-update{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);padding:8px 10px;border-top:1px solid var(--border-color);letter-spacing:.02em}.ace_editor{height:100%}.ace_scroller{cursor:default}.status-bar{display:flex;align-items:center;gap:12px;background-color:var(--canvas-bg-color);padding:10px 14px;margin:0;border-bottom:1px solid var(--border-color);border-radius:0;flex-shrink:0}.status-bar-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.status-bar-actions .btn{display:inline-flex;align-items:center;gap:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;padding:4px 10px;font-size:13px;min-height:30px}.status-bar-actions .btn:hover{background:var(--hover-bg-color);color:var(--color)}.status-bar-actions .btn.btn-active{border-color:currentColor;font-weight:600}.paths{flex:1 1 auto;min-width:0;padding:0;margin:0;background-color:initial;border:none;border-radius:0;align-items:center;overflow-x:auto;white-space:nowrap;flex-wrap:nowrap}.paths::-webkit-scrollbar{display:none}.paths a{color:var(--color)}.paths .breadcrumb-item{padding-left:3px}.paths .breadcrumb-item::before{padding-right:3px}.content{height:100%;overflow:scroll;padding-top:42px;background-color:var(--main-bg-color);text-align:center}.image-content{max-width:100%;max-height:100%;text-align:center;padding:4px}.pdf-viewer{display:flex;flex-direction:column;height:100%;min-height:0;background-color:var(--main-bg-color)}.pdf-toolbar{display:flex;align-items:center;gap:4px;flex:0 0 auto;padding:4px 8px;border-bottom:1px solid var(--border-color,rgba(0,0,0,.12))}.pdf-toolbar-group{display:inline-flex;align-items:center;gap:4px}.pdf-toolbar-right{margin-left:auto}.pdf-toolbar-btn{border:0;background:0 0;color:inherit;padding:4px 8px;border-radius:4px;font-size:13px;line-height:1.2;cursor:pointer}.pdf-toolbar-btn:hover:not(:disabled){background-color:rgba(128,128,128,.18)}.pdf-toolbar-btn:disabled{opacity:.4;cursor:default}.pdf-toolbar-zoom{min-width:52px;font-variant-numeric:tabular-nums}.pdf-toolbar-page{width:3.5em;text-align:right;padding:2px 4px;font-size:13px;color:inherit;background:0 0;border:1px solid var(--border-color,rgba(0,0,0,.2));border-radius:4px}.pdf-toolbar-count{font-size:13px;opacity:.75;font-variant-numeric:tabular-nums}.pdf-pages{flex:1 1 auto;min-height:0;overflow:auto;padding:8px 0}.pdf-viewer-page{margin:0 auto 12px}.pdf-viewer-page canvas{display:block;box-shadow:0 1px 4px rgba(0,0,0,.25)}.pdf-viewer-error{padding:24px;text-align:center;font-weight:700}.html-doc{display:block;height:100%}.html-doc-frame{display:block;width:100%;height:100%;border:0;background-color:#fff}.file-error{font-weight:700;font-size:50px;text-align:center}pdfviewer{display:block;padding:15px}pdfpageviewer{display:block;width:100%;margin-bottom:10px}notebook{display:block;text-align:left;padding:15px}@media (min-width:768px){notebook{padding-left:100px}}.nb-output td,.nb-output th{border:1px solid var(--border-color)!important}.paper-faq{max-width:1180px;margin:0 auto;padding:48px 32px 80px;font-family:var(--font-sans)}.paper-faq-hero{padding-bottom:40px;border-bottom:1px solid var(--border-color);margin-bottom:36px}.paper-faq-eyebrow{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;margin-bottom:32px}.paper-faq-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.5vw,4.6rem);line-height:1.03;letter-spacing:-.02em;color:var(--color);margin:0 0 22px;max-width:14em}.paper-faq-title em{font-style:italic;color:var(--color)}.paper-faq-lede{color:var(--ink-soft);font-size:18px;line-height:1.55;max-width:38em;margin:0}.paper-faq-lede a{color:var(--color);border-bottom:1px solid var(--color)}.paper-faq-lede a:hover{color:var(--accent);border-bottom-color:var(--accent)}.paper-faq-body{display:grid;grid-template-columns:220px 1fr;gap:60px;align-items:start}.paper-faq-toc{position:sticky;top:32px;font-size:14px}.paper-faq-toc-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;padding-bottom:10px;margin-bottom:6px;border-bottom:1px solid var(--border-color)}.paper-faq-toc nav{display:flex;flex-direction:column}.paper-faq-toc nav a{color:var(--ink-soft);padding:8px 0 8px 14px;border-left:2px solid transparent;text-decoration:none;margin-left:-2px}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.faq-section{min-width:0}.faq-section>div{width:100%}.faq-section h4.faq-cat{font-family:var(--font-serif);font-weight:400;font-size:clamp(1.7rem,2.6vw,2.2rem);letter-spacing:-.015em;color:var(--color);margin:0 0 6px;padding-bottom:14px;border-bottom:1px solid var(--border-color)}.faq-section h4.faq-cat i{display:none}.faq-section .panel-group{margin-bottom:56px}.faq-section .panel-default .panel-title a{display:block;position:relative;padding:22px 0 22px 42px;font-family:var(--font-serif);font-weight:400;font-size:20px;line-height:1.35;letter-spacing:-.005em;color:var(--color);text-decoration:none;cursor:pointer}.faq-section .panel-default .panel-title a:hover{color:var(--accent)}.faq-section .panel-heading{background:0 0;padding:0!important;border:none}.faq-section .panel-default{background:0 0;border:none;border-bottom:1px solid var(--border-soft);border-radius:0;margin-bottom:0!important;box-shadow:none}.faq-section .panel-default .panel-title{margin-bottom:0}.faq-section .panel-default .panel-title a:after{content:"−";position:absolute;left:0;right:auto;top:22px;transform:none;font-family:var(--font-mono);font-size:18px;line-height:1.35;color:var(--ink-muted);float:none;margin:0;font-weight:400}.faq-section .panel-default .panel-title a.collapsed:after{content:"+"}.faq-section .panel-default .panel-body{padding:0 0 22px 42px!important;color:var(--ink-soft);font-size:15px;line-height:1.65;border-top:none;max-width:42em}.table{color:var(--color)}.dropdown-divider,.table td,.table th,hr{border-color:var(--border-color)}.table.repositories td{word-break:break-word}loc{display:block;position:relative;width:100%;height:5px}loc .lang{float:left;height:100%}.rounded-circle.fa{display:inline-block;font-size:75px;height:140px;width:140px;border:4px solid;line-height:140px;text-align:center}.featurette-divider{margin:4.5rem 0;border-color:var(--border-color)}.featurette-heading{font-family:var(--font-serif);font-weight:400;font-size:2rem;line-height:1.15;letter-spacing:-.02em;margin-bottom:14px;color:var(--color)}.dark-mode .shadow{box-shadow:none}.dark-mode .overflow-auto::-webkit-scrollbar{width:10px}.dark-mode .overflow-auto::-webkit-scrollbar-track{-webkit-box-shadow:none;background:inherit;border-radius:0}.dark-mode .overflow-auto::-webkit-scrollbar-thumb{border-radius:10px;border:1px solid var(--border-color);background-color:var(--hover-bg-color)}.dark-mode .rgba-gradient{background:linear-gradient(135deg,#2a2d4a,#151728)}.section-number{padding-right:10px;font-weight:700;font-style:italic}.org-subscript-child{font-size:85%}.highlighted-line{position:absolute;background:rgba(100,200,100,.5);z-index:20}code,pre{font-family:"Fira Code","Courier New",Courier,monospace;line-height:1.1;color:var(--color)}.diff-file,.diff-index,.diff-lines{background:rgba(172,172,172,.5)}.diff-add{background:rgba(100,200,100,.5)}.diff-remove{background:rgba(200,100,100,.5)}.dashboard-title{font-size:1.375rem;font-weight:600;letter-spacing:-.01em}.quota-row{display:flex;gap:16px;margin-bottom:16px;padding:0}.quota-item{flex:1;min-width:0}.quota-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}.quota-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;opacity:.7}.quota-value{font-size:.8125rem;font-weight:500;font-variant-numeric:tabular-nums}.quota-progress{height:6px;border-radius:3px;background:var(--hover-bg-color)}.quota-progress .progress-bar{border-radius:3px}.filter-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;font-size:.8125rem;font-weight:500;background:var(--primary-bg);color:var(--primary-color);border-radius:12px;line-height:1.4}.filter-chip-close{display:inline-flex;align-items:center;justify-content:center;background:0 0;border:none;color:inherit;opacity:.7;cursor:pointer;padding:0;min-width:24px;min-height:24px;margin:-6px -6px -6px 0;font-size:1rem;line-height:1;border-radius:999px}.filter-chip-close:hover{opacity:1}.repo-list{list-style:none;padding:0;margin:0}.repo-list-item{display:flex;align-items:flex-start;justify-content:space-between;padding:16px 0;border-bottom:1px solid var(--border-color);gap:12px}.repo-list-item:first-child{border-top:1px solid var(--border-color)}.repo-list-item.repo-inactive{opacity:.6}.repo-list-item-content{flex:1;min-width:0}.repo-list-item-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}.repo-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color);word-break:break-word}.repo-name:hover{color:var(--accent)}.repo-source{font-size:.875rem;opacity:.8;display:flex;flex-wrap:wrap;align-items:center;gap:6px}.repo-date{opacity:.7}.repo-meta{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px;font-size:.8125rem;opacity:.7}.repo-meta span{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.repo-list-item-actions{flex-shrink:0;padding-top:2px;margin-left:14px}.repo-list-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:48px 20px;opacity:.5;font-size:.9375rem;list-style:none;border-bottom:1px solid var(--border-color);border-top:1px solid var(--border-color)}.repo-list-empty i{font-size:1.75rem}.type-badge{display:inline-flex;align-items:center;gap:3px;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;padding:2px 8px;border-radius:4px;white-space:nowrap}.type-badge{font-family:var(--font-mono);letter-spacing:.06em;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-bg-alt,transparent)}.type-badge.type-pr,.type-badge.type-repo{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.dark-mode .type-badge.type-pr,.dark-mode .type-badge.type-repo{background:rgba(255,255,255,.06);color:var(--ink-muted);border-color:var(--border-color)}.type-badge.type-coauthor{background:rgba(99,102,241,.12);color:#4f46e5;border-color:rgba(99,102,241,.35);margin-left:6px}.dark-mode .type-badge.type-coauthor{background:rgba(129,140,248,.18);color:#a5b4fc;border-color:rgba(165,180,252,.45)}.btn-group .btn:not(.btn-primary){background:var(--hover-bg-color)}.anonymize-page{display:flex;flex-direction:column;min-height:0}.anonymize-landing{flex:1 1 0;min-height:min-content;display:flex;align-items:center;justify-content:center;padding:20px}.anonymize-landing-inner{width:100%;max-width:600px}.anonymize-landing-inner h2{font-weight:700}.anonymize-workspace{display:flex;flex-direction:column;flex:1 1 0;min-height:0;background:var(--canvas-bg-color)}.anonymize-topbar{background:var(--paper-card);border-bottom:1px solid var(--border-color);padding:18px 28px;flex:0 0 auto}.anonymize-topbar-inner{max-width:1400px;margin:0 auto}.anonymize-topbar-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.anonymize-topbar-title{margin:4px 0 0;font-size:clamp(1.8rem,3vw,2.4rem)}.anonymize-split{flex:1 1 auto;display:flex;min-height:0}.anonymize-form-col{flex:0 0 auto;width:100%;min-width:0;background:var(--canvas-bg-color);border-right:1px solid var(--border-color);overflow-y:auto}.anonymize-form-col .paper-settings-main{max-width:720px;padding:28px 32px 40px;margin:0}.anonymize-form-col .paper-settings-section:first-child{padding-top:0}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;background:var(--canvas-bg-color);padding:14px 0 0;border-top:1px solid var(--border-color);margin-top:20px}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{flex:1 1 auto;min-width:0;overflow:auto;background:var(--paper-bg-alt);padding:28px 32px}.anonymize-preview-head{display:flex;align-items:baseline;gap:12px;padding-bottom:12px;border-bottom:1px solid var(--border-color);margin-bottom:20px}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.anonymize-preview-sub{color:var(--ink-soft);font-size:13px}.anonymize-preview-body{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:28px 32px}.form-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid-3{display:grid;grid-template-columns:2fr 1fr 1fr;gap:16px}@media (max-width:700px){.form-grid-2,.form-grid-3{grid-template-columns:1fr}}.paper-optional{font-family:var(--font-sans);font-weight:400;color:var(--ink-muted);text-transform:none;letter-spacing:0;font-size:11px;margin-left:6px}.paper-plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}.paper-plan-card{position:relative;display:block;padding:18px 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease;margin:0}.paper-plan-card input[type=radio]{position:absolute;opacity:0;pointer-events:none}.paper-plan-card.selected{border-color:var(--color);box-shadow:0 0 0 2px var(--color) inset}.paper-plan-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-plan-price{font-family:var(--font-serif);font-size:2rem;color:var(--color);margin:6px 0 4px}.paper-plan-price .paper-plan-per{font-family:var(--font-sans);font-size:12px;color:var(--ink-soft)}.paper-plan-desc{font-size:13px;color:var(--ink-soft)}.paper-plan-desc ul{padding-left:18px;margin:0}.paper-settings-copy{color:var(--ink-soft);font-size:13px;margin:0 0 14px}.anonymize-section-title{font-size:.875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;margin:18px 0 8px 0;padding-bottom:6px;border-bottom:1px solid var(--border-color);opacity:.7}.anonymize-section-title i{margin-right:4px}.anonymize-submit-bar{padding:12px 0 4px 0}.anonymize-submit-bar .btn{font-size:1rem;padding:10px 20px;font-weight:600}.anonymize-page .form-check{padding-top:4px;padding-bottom:4px}.anonymize-page .form-check-label{font-weight:500}.anonymize-preview-col{min-height:0;min-width:0}.pr-diff pre{overflow-x:auto;max-width:100%}@media (min-width:768px){.anonymize-form-col{height:100%;width:520px;flex:0 0 520px}.anonymize-preview-col{height:100%;flex:1}}@media (max-width:767px){.anonymize-workspace{flex:0 0 auto;min-height:0}.anonymize-topbar{padding:14px 16px}.anonymize-topbar-title{font-size:1.5rem;margin-top:2px}.anonymize-split{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.anonymize-form-col{width:100%!important;flex:0 0 auto!important;height:auto!important;border-right:none;border-bottom:1px solid var(--border-color);overflow:visible}.anonymize-form-col .paper-settings-main{padding:18px 16px 24px;max-width:none}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;margin:20px -16px 0;padding:12px 16px;background:var(--canvas-bg-color);border-top:1px solid var(--border-color);z-index:10}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{width:100%;flex:0 0 auto;height:auto!important;max-height:none;padding:18px 16px 24px;overflow:visible}.anonymize-preview-body{padding:16px;border-radius:8px}.anonymize-preview-body .pr-diff pre,.anonymize-preview-body pre{overflow-x:auto;max-width:100%}.anonymize-landing-inner{padding:16px}}@media (min-width:1280px){.anonymize-form-col{width:620px;flex:0 0 620px}}@media (max-width:767px){.btn{min-height:38px;padding:6px 14px;font-size:14px}.btn-sm{min-height:34px;padding:5px 10px}.navbar .nav-link{padding:8px 12px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:24px;line-height:32px}.container.page{padding-left:15px;padding-right:15px;max-width:100%}h1{font-size:1.5rem}h2{font-size:1.375rem}h3{font-size:1.125rem}.repo-list-item{flex-direction:column}.repo-list-item-actions{align-self:flex-start}.quota-row{flex-direction:column;gap:10px;padding:10px 12px}.dropdown-menu{position:absolute;right:0;left:auto}.form-group{margin-bottom:12px}.form-control{font-size:16px}.status-bar{gap:6px;padding:8px 10px}.status-bar .btn{font-size:12px;padding:4px 10px;min-height:32px}.status-bar .paths{font-size:12px;overflow-x:auto;flex-wrap:nowrap;white-space:nowrap;-webkit-overflow-scrolling:touch}.status-bar .paths::-webkit-scrollbar{display:none}.status-bar-actions{flex-shrink:0;gap:4px}#home .display-4{font-size:1.75rem}#home h4.subtext-header{font-size:1rem}.progress:not(.quota-progress){min-width:120px!important}.badge{font-size:70%}.col-2.input-group{width:100%!important;max-width:100%;flex:0 0 100%}.color-text-secondary span{display:inline-block;margin-bottom:2px}.floatingchat-container-wrap{display:none!important}.anonymize-landing{align-items:flex-start;padding-top:60px}.anonymize-page .container-fluid>.row{height:auto!important;min-height:100%}.anonymize-form-col{width:100%!important;flex:0 0 100%!important;border-right:none;border-top:1px solid var(--border-color)}.anonymize-preview-col{height:auto!important;max-height:none}.anonymize-section-title{font-size:.8125rem;margin:12px 0 8px 0}.anonymize-submit-bar{position:sticky;bottom:0;background:var(--sidebar-bg-color);padding:10px 0;margin:0 -12px;padding-left:12px;padding-right:12px;border-top:1px solid var(--border-color);z-index:10}.anonymize-submit-bar .btn{font-size:1rem;padding:12px 20px}.anonymize-page .form-check{padding-top:6px;padding-bottom:6px;min-height:36px}.anonymize-page .form-check-label{font-size:.9375rem}.anonymize-page .card-body{padding:12px}.pr-title{font-size:1.125rem}.pr-diff pre{font-size:.75rem}.pr-comment .mb-1 h5{font-size:1rem}.nav-tabs .nav-link{padding:8px 12px;font-size:.875rem}}@media (min-width:768px) and (max-width:991px){.container.page{max-width:100%;padding-left:15px;padding-right:15px}.leftCol{flex:0 0 250px;width:250px}}.explorer-page{display:flex;height:100%;width:100%;background:var(--canvas-bg-color);position:relative}.explorer-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;overflow:hidden;background:var(--canvas-bg-color)}.explorer-content{flex:1 1 auto;min-height:0;width:100%;overflow:auto}.leftCol-close,.leftCol-head{display:none}.leftCol-body{flex:1 1 auto;min-height:0;overflow:auto}.leftCol-foot{padding:8px 12px;border-top:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-foot .last-update{display:block;border-top:none;padding:0}.leftCol-backdrop{display:none}.paper-inline-warning{display:flex;align-items:flex-start;gap:8px;margin:8px;padding:10px 12px;background:rgba(138,107,30,.08);border:1px solid rgba(138,107,30,.35);border-radius:8px;color:var(--color);font-size:13px;line-height:1.4}.paper-inline-warning i{color:#8a6b1e;margin-top:2px;flex-shrink:0}.dark-mode .paper-inline-warning i{color:#ffd37a}@media (min-width:768px){.leftCol-body{padding:8px 4px}}.sidebar-toggle{display:none;align-items:center;gap:8px;position:fixed;bottom:18px;right:18px;z-index:1100;padding:10px 14px;background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);border-radius:999px;font-family:var(--font-sans);font-size:13px;font-weight:500;box-shadow:0 6px 20px rgba(0,0,0,.15);cursor:pointer;outline:0}.sidebar-toggle:hover{background:var(--primary-hover-bg)}.sidebar-toggle:focus,.sidebar-toggle:focus-visible{outline:0;box-shadow:0 6px 20px rgba(0,0,0,.15)}@media (max-width:991px){.sidebar-toggle{display:inline-flex}.leftCol{position:fixed;top:0;left:0;bottom:0;width:min(86vw,340px);max-width:340px;z-index:1200;border:none;border-right:1px solid var(--border-color);transform:translateX(0);transition:transform .22s ease;box-shadow:4px 0 24px rgba(0,0,0,.18);background:var(--sidebar-bg-color)}.leftCol.collapsed{transform:translateX(-105%);box-shadow:none;pointer-events:none}.leftCol-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.leftCol-close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;background:0 0;border:1px solid var(--border-color);border-radius:8px;color:var(--ink-muted);cursor:pointer}.leftCol-close:hover{color:var(--color);border-color:var(--color)}.leftCol-foot{display:block}.leftCol-body{padding:4px 0}.leftCol-backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.32);z-index:1150;backdrop-filter:blur(2px)}.dark-mode .leftCol-backdrop{background:rgba(0,0,0,.5)}}.admin-nav{display:flex;gap:4px;padding:4px;margin:8px 0 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;flex-wrap:wrap}.admin-nav a{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:7px;color:var(--ink-muted);text-decoration:none;font-family:var(--font-mono);font-size:12px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;transition:background-color .15s,color .15s;white-space:nowrap}.admin-nav a:hover{background:var(--paper-bg-alt);color:var(--color)}.admin-nav a.active{background:var(--color);color:var(--paper-card)}.admin-nav a i{font-size:12px;width:14px;text-align:center}@media (max-width:767px){.admin-nav{flex-direction:column}.admin-nav a{justify-content:flex-start}}.admin-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:16px}.admin-stat-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:10px 12px}.admin-stat-card .stat-value{font-family:var(--font-serif);font-size:1.375rem;font-weight:400;line-height:1.1;color:var(--color)}.admin-stat-card .stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-top:4px}.admin-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:16px 0 12px}.admin-toolbar .form-control{max-width:320px}@media (max-width:767px){.admin-toolbar .form-control{max-width:100%;width:100%}}.pagination-compact{display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pagination-compact input{width:60px;text-align:center;flex-shrink:0}.pagination-compact .btn{padding:4px 10px;min-height:34px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);flex-shrink:0}.pagination-compact>span{white-space:nowrap}.admin-list-item{display:flex;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--border-color)}.admin-list-item:last-child{border-bottom:none}.admin-list-item .item-main{flex:1;min-width:0}.admin-list-item .item-title{font-size:1rem;font-weight:600;margin-bottom:4px;word-break:break-word}.admin-list-item .item-meta{font-size:.875rem;opacity:.8}.admin-list-item .item-meta span{margin-right:12px;display:inline-block;margin-bottom:2px}.admin-list-item .item-actions{flex-shrink:0}@media (max-width:767px){.admin-list-item{flex-direction:column;gap:8px}.admin-list-item .item-actions{align-self:flex-start}}.status-badge{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.3px;vertical-align:middle}.status-badge{font-family:var(--font-sans);font-weight:500;letter-spacing:.02em;border:1px solid transparent;text-transform:none;font-size:12px;padding:1px 9px 2px;border-radius:999px}.status-badge.status-ready{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.status-badge.status-error{background:#fbe7e7;color:#b42318;border-color:#f3c7c7}.status-badge.status-download,.status-badge.status-preparing{background:#eef0ff;color:#3b4ad6;border-color:#d4d8fa}.status-badge.status-expired,.status-badge.status-expiring,.status-badge.status-removed,.status-badge.status-removing{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.status-badge.status-active{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.queue-job-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 18px;margin-bottom:10px}.queue-job-card .job-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;flex-wrap:wrap;gap:8px}.queue-job-card .job-id{font-family:var(--font-mono);font-size:.9375rem;color:var(--color);word-break:break-all;display:flex;align-items:center;gap:10px}.queue-job-card .job-timestamps{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);display:flex;flex-wrap:wrap;gap:14px}.queue-job-card .job-actions{display:flex;gap:8px;margin-top:10px}.queue-job-card .job-actions .btn{font-size:12px;padding:4px 12px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.admin-section-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--border-color)}.admin-section-header h2{margin:0;font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.admin-section-header h2 i{margin-right:6px;color:var(--ink-muted)}.admin-section-header .section-count{background:var(--paper-bg-alt);color:var(--ink-muted);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;padding:1px 10px;border-radius:999px}.user-detail-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:22px;margin-bottom:24px}.user-detail-card .user-header{display:flex;align-items:center;gap:16px;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--border-color);flex-wrap:wrap}.user-detail-card .user-header img{border-radius:50%}.user-detail-card .user-header h2{margin:0;font-family:var(--font-serif);font-weight:400;font-size:1.5rem;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.user-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;font-size:.9375rem}.user-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.user-detail-grid .detail-value{word-break:break-all;color:var(--color)}@media (max-width:767px){.user-detail-grid{grid-template-columns:1fr}.user-detail-grid .detail-label{margin-top:8px;border-top:1px solid var(--border-color);padding-top:8px}.user-detail-grid .detail-label:first-child{border-top:none;margin-top:0;padding-top:0}}.paper-empty{min-height:calc(100vh - 60px);display:flex;align-items:center;justify-content:center;padding:40px 24px}.paper-empty-inner{max-width:560px;text-align:left}.paper-empty-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.4rem,6vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:18px 0 20px;color:var(--color)}.paper-empty-title em{color:var(--accent);font-style:italic}.paper-empty-lede{font-size:18px;line-height:1.55;color:var(--ink-soft);text-wrap:pretty}.paper-empty-cta{display:flex;gap:10px;margin-top:28px;flex-wrap:wrap}.paper-page{max-width:1100px;margin:0 auto;padding:32px 32px 80px}@media (max-width:991px){.paper-page,.paper-page.container,.paper-page.container-fluid{padding:20px 18px 60px!important}.paper-page .row{margin-left:0;margin-right:0}.paper-page .row>.w-100,.paper-page .row>[class*=col]{padding-left:0;padding-right:0}.navbar.navbar-expand-lg{padding:10px 18px!important}.navbar .navbar-collapse{margin:10px -18px 0;padding:12px 18px 16px;border-top:1px solid var(--border-color);background:var(--header-bg-color)}.navbar .navbar-nav{align-items:stretch!important;gap:2px}.navbar .navbar-nav .nav-item,.navbar .navbar-nav .nav-link{width:100%}.navbar .nav-link{display:flex!important;align-items:center;justify-content:flex-start;margin:0!important;padding:12px 4px!important;border-bottom:1px solid var(--border-color)!important;border-radius:0;font-size:14px;line-height:1.2;gap:0;min-height:44px;box-sizing:border-box}.navbar .nav-link:not(.btn-signin):not(.user-chip){color:var(--color)!important}.navbar .nav-link .fa,.navbar .nav-link .fab,.navbar .nav-link .fas,.navbar .nav-link i{display:inline-flex!important;align-items:center;justify-content:center;width:28px;flex-shrink:0;font-size:16px;line-height:1;margin:0 10px 0 0!important}.navbar .navbar-nav .nav-item:last-child .nav-link,.navbar .navbar-nav>.nav-link:last-child{border-bottom-color:transparent!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--border-color)!important}.navbar .nav-item>.nav-link:not(.btn-signin):not(.user-chip)::before{content:'';display:inline-block;width:28px;margin-right:10px;flex-shrink:0}.navbar .nav-link.nav-icon::before,.navbar .nav-link:has(>i)::before{display:none!important}.navbar .nav-link.nav-icon{width:100%!important;height:auto!important;justify-content:flex-start!important;padding:12px 4px!important}.navbar .nav-link.nav-icon::after{content:attr(title);font-family:var(--font-sans);font-size:14px;color:var(--color)}.navbar .btn-signin{display:inline-flex!important;width:auto!important;align-self:flex-start;justify-content:center;height:40px;padding:0 18px!important;margin:14px 0 0!important;border-radius:8px;border-bottom:none!important}.navbar .btn-signin i{margin:0 8px 0 0!important;width:auto!important}.navbar .user-chip-wrap{width:100%}.navbar .user-chip{display:flex!important;width:100%;margin:0!important;padding:10px 4px!important;background:0 0!important;border:none!important;border-bottom:1px solid var(--border-color)!important;border-radius:0!important;justify-content:flex-start;gap:0;min-height:44px}.navbar .user-chip::before{display:none!important}.navbar .user-chip img{width:28px!important;height:28px!important;margin-right:10px!important;flex-shrink:0}.navbar .user-chip .user-chip-name{font-size:14px;font-weight:500;color:var(--color)!important}.navbar .user-chip.dropdown-toggle::after{margin-left:auto;color:var(--ink-muted)}.navbar .user-chip-wrap .dropdown-menu{position:static!important;float:none;width:100%;margin:0!important;padding:0!important;background:0 0!important;border:none!important;box-shadow:none!important;transform:none!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item{padding:10px 4px 10px 42px!important;font-size:14px;color:var(--ink-muted)!important;background:0 0!important;border-bottom:1px solid var(--border-color);text-align:left!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item:last-child{border-bottom:none}.navbar .user-chip-wrap .dropdown-divider{display:none}.navbar-brand{border-right:none!important;padding-right:0!important;margin-right:0!important}.dark-mode .navbar .navbar-collapse{background:var(--header-bg-color);border-top-color:var(--border-color)}.dark-mode .navbar .nav-link{border-bottom-color:var(--border-color)!important}.dark-mode .navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}}.status-pill{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;background:var(--paper-bg-alt);border:1px solid var(--border-color);color:var(--ink-soft);font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase}.paper-progress{position:relative;height:auto;background:0 0;margin:18px 0 8px}.paper-progress::before{content:"";display:block;height:8px;background:var(--paper-bg-alt);border-radius:999px}.paper-progress .paper-progress-bar{position:absolute;top:0;left:0;height:8px;background:var(--color);border-radius:999px;transition:width .4s ease;min-width:4px}.paper-progress .paper-progress-label{display:flex;justify-content:space-between;align-items:center;margin-top:10px;font-family:var(--font-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted)}.paper-progress .paper-progress-pct{color:var(--color)}.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--color)}.paper-error-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #c53030;border-radius:10px;color:var(--color)}.dark-mode .paper-error-card{border-left-color:#ff8b7b}.paper-ratelimit-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #d69e2e;border-radius:10px;color:var(--color)}.dark-mode .paper-ratelimit-card{border-left-color:#f6e05e}.paper-ratelimit-head{display:flex;align-items:flex-start;gap:14px}.paper-ratelimit-head>i{font-size:18px;color:#d69e2e;margin-top:4px;flex-shrink:0}.dark-mode .paper-ratelimit-head>i{color:#f6e05e}.paper-ratelimit-card strong{color:var(--color)}.status-pill-ratelimit{border-color:#d69e2e;color:#d69e2e}.dark-mode .status-pill-ratelimit{border-color:#f6e05e;color:#f6e05e}.status-ratelimit{background:#d69e2e}.dark-mode .status-ratelimit{background:#f6e05e}.paper-error-head{display:flex;align-items:flex-start;gap:14px}.paper-error-head>i{font-size:18px;color:#c53030;margin-top:4px;flex-shrink:0}.dark-mode .paper-error-head>i{color:#ff8b7b}.paper-error-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-error-title{font-family:var(--font-serif);font-size:1.375rem;line-height:1.2;margin-top:2px;color:var(--color)}.paper-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft);font-family:var(--font-mono);word-break:break-word;white-space:pre-wrap}.paper-error-hints{margin:14px 0 0;padding-left:18px;color:var(--ink-soft);font-size:14px;line-height:1.6}.paper-error-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}.paper-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;margin-top:18px;font-size:.9375rem}.paper-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.paper-detail-grid .detail-value{word-break:break-all;color:var(--color)}.paper-detail-grid .detail-value a{color:var(--color);border-bottom:1px solid var(--border-color)}.paper-detail-grid .detail-value a:hover{border-bottom-color:var(--color)}@media (max-width:700px){.paper-detail-grid{grid-template-columns:1fr;gap:4px 0}.paper-detail-grid .detail-label{padding-top:8px}}.paper-support-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin:18px 0 28px}.paper-support-card{display:flex;flex-direction:column;gap:10px;padding:20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;color:var(--color);text-decoration:none;transition:border-color .15s ease,transform .15s ease}.paper-support-card:hover{border-color:var(--color);text-decoration:none;color:var(--color)}.paper-support-card .paper-support-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);display:flex;align-items:center;gap:8px}.paper-support-card p{margin:0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.paper-support-card .paper-support-cta{margin-top:auto;font-size:13px;font-weight:500;color:var(--color);display:inline-flex;align-items:center;gap:6px}.paper-support-card:hover .paper-support-cta i{transform:translateX(2px)}.paper-support-card .paper-support-cta i{transition:transform .15s ease}.pr-page{min-height:100%;background:var(--canvas-bg-color)}.pr-page-inner{padding-top:24px;padding-bottom:60px}.pr-header{margin:6px 0 18px}.pr-title{margin:4px 0 10px;font-size:clamp(1.6rem,3vw,2.4rem);line-height:1.15;word-break:break-word}.pr-header-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pr-header-meta .pr-meta-item{display:inline-flex;align-items:center;gap:6px}.pr-header-meta .pr-meta-item i{color:var(--ink-muted)}.pr-body-card{margin:18px 0 24px;padding:20px 22px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-body-card .paper-section-eyebrow{margin-bottom:12px}.paper-tabs{display:flex;flex-wrap:wrap;gap:0;border-bottom:1px solid var(--border-color);margin:18px 0 0}.paper-tabs .paper-tab{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;background:0 0;border:0;border-bottom:2px solid transparent;font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--ink-muted);cursor:pointer;transition:color .15s ease,border-color .15s ease;margin-bottom:-1px}.paper-tabs .paper-tab:hover{color:var(--color)}.paper-tabs .paper-tab.active{color:var(--color);border-bottom-color:var(--color)}.paper-tabs .paper-tab i{color:inherit;opacity:.85}.paper-tabs .paper-tab:active,.paper-tabs .paper-tab:focus,.paper-tabs .paper-tab:focus-visible{outline:0;box-shadow:none}.paper-tabs .paper-tab:focus-visible{color:var(--color);background:var(--hover-bg-color);border-radius:6px 6px 0 0}.pr-diff{margin:16px 0 28px;display:flex;flex-direction:column;gap:16px}.diff-file-block{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;overflow:hidden}.diff-file-header{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--paper-bg-alt);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:13px;color:var(--color)}.diff-file-icon{color:var(--ink-muted);flex-shrink:0}.diff-file-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:break-all}.diff-file-status{flex-shrink:0;padding:2px 8px;border-radius:999px;font-size:10px;letter-spacing:.12em;text-transform:uppercase;border:1px solid var(--border-color);color:var(--ink-muted);background:var(--paper-card)}.diff-file-status-added{color:#2f6b3e;border-color:rgba(47,107,62,.35);background:rgba(47,107,62,.08)}.diff-file-status-deleted{color:#a13a2e;border-color:rgba(161,58,46,.35);background:rgba(161,58,46,.08)}.diff-file-status-renamed{color:#8a6b1e;border-color:rgba(138,107,30,.35);background:rgba(138,107,30,.08)}.dark-mode .diff-file-status-added{color:#a7e2a7;border-color:rgba(167,226,167,.35);background:rgba(167,226,167,.08)}.dark-mode .diff-file-status-deleted{color:#ff8b7b;border-color:rgba(255,139,123,.35);background:rgba(255,139,123,.08)}.dark-mode .diff-file-status-renamed{color:#ffd37a;border-color:rgba(255,211,122,.35);background:rgba(255,211,122,.08)}.diff-file-table{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-size:13px;line-height:1.55;table-layout:fixed}.diff-file-table tr.diff-row{vertical-align:top}.diff-file-table .diff-gutter{width:48px;padding:0 10px;text-align:right;color:var(--ink-muted);background:var(--paper-bg-alt);border-right:1px solid var(--border-color);user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;white-space:nowrap}.diff-file-table .diff-gutter-new{border-right:1px solid var(--border-color)}.diff-file-table .diff-sign{width:18px;padding:0 6px;text-align:center;color:var(--ink-muted);background:var(--paper-bg-alt);user-select:none;vertical-align:top}.diff-file-table .diff-code{padding:1px 12px;white-space:pre-wrap;word-break:break-word;color:var(--color)}.diff-row-hunk td{background:var(--paper-bg-alt)!important;color:var(--ink-muted);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-size:12px;letter-spacing:.02em;padding-top:6px;padding-bottom:6px}.diff-row-hunk .diff-code{color:var(--ink-muted)}.diff-row-add .diff-code{background:rgba(47,107,62,.1);color:#1f4a2a}.diff-row-add .diff-gutter,.diff-row-add .diff-sign{background:rgba(47,107,62,.06);color:#2f6b3e}.diff-row-remove .diff-code{background:rgba(161,58,46,.1);color:#6e1f1a}.diff-row-remove .diff-gutter,.diff-row-remove .diff-sign{background:rgba(161,58,46,.06);color:#a13a2e}.dark-mode .diff-row-add .diff-code{background:rgba(167,226,167,.1);color:#c9f0c9}.dark-mode .diff-row-add .diff-gutter,.dark-mode .diff-row-add .diff-sign{background:rgba(167,226,167,.06);color:#a7e2a7}.dark-mode .diff-row-remove .diff-code{background:rgba(255,139,123,.1);color:#ffc9c0}.dark-mode .diff-row-remove .diff-gutter,.dark-mode .diff-row-remove .diff-sign{background:rgba(255,139,123,.06);color:#ff8b7b}@media (max-width:700px){.diff-file-table{font-size:12px}.diff-file-table .diff-gutter{width:36px;padding:0 6px}.diff-file-table .diff-sign{width:14px;padding:0 4px}.diff-file-table .diff-code{padding:1px 8px}}.pr-comments{list-style:none;margin:16px 0 28px;padding:0;display:flex;flex-direction:column;gap:12px}.pr-comment{padding:16px 18px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-comment-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;padding-bottom:8px;margin-bottom:8px;border-bottom:1px solid var(--border-color)}.pr-comment-author{font-weight:600;color:var(--color);font-size:14px;display:inline-flex;align-items:center;gap:6px}.pr-comment-author i{color:var(--ink-muted);font-size:12px}.pr-comment-date{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.pr-comment-body{color:var(--color);font-size:14px;line-height:1.6}.pr-comment-body :last-child{margin-bottom:0}@media (max-width:700px){.pr-page-inner{padding-top:14px;padding-bottom:40px}.pr-body-card{padding:14px 14px;border-radius:8px}.pr-comment{padding:12px 14px}.paper-tabs .paper-tab{padding:10px 12px;font-size:13px}.pr-diff pre{font-size:12px;padding:12px}}.toast{background-color:var(--paper-card)!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:10px!important;box-shadow:0 8px 24px rgba(0,0,0,.08);backdrop-filter:none;min-width:280px;max-width:calc(100vw - 24px)}.toast .toast-header{background:0 0!important;color:var(--color)!important;border-bottom:1px solid var(--border-color)!important;font-family:var(--font-sans);padding:10px 12px}.toast .toast-header strong{font-weight:600;color:var(--color);letter-spacing:.01em}.toast .toast-header .close{color:var(--ink-muted)!important;text-shadow:none;opacity:.9;font-size:1.25rem}.toast .toast-header .close:hover{color:var(--color)!important;opacity:1}.toast .toast-body{color:var(--color)!important;padding:12px;font-size:14px;line-height:1.45}.dark-mode .toast{box-shadow:0 8px 24px rgba(0,0,0,.5)}.paper-crumbs{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);letter-spacing:0}.paper-crumbs .here,.paper-crumbs a{color:var(--color);text-decoration:none}.paper-page-title{font-family:var(--font-sans);font-weight:600;font-size:32px;line-height:1.2;letter-spacing:-.035em;margin:8px 0 6px;color:var(--color)}.paper-page-title em{color:inherit;font-style:normal}.paper-page-lede{color:var(--ink-soft);font-size:16px;max-width:640px;line-height:1.55}.paper-meta-rule{display:flex;flex-wrap:wrap;gap:16px 24px;align-items:center;margin:22px 0 18px;padding:12px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paper-meta-rule b{color:var(--color);font-weight:500}.paper-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:10px;padding:20px 22px}.dark-mode .paper-card{background:var(--admin-stat-bg)}.paper-section-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500;margin-bottom:10px;display:block}.paper-section-title{font-family:var(--font-serif);font-weight:400;font-size:22px;letter-spacing:-.01em;margin:0 0 8px}.paper-kbd{display:inline-block;font-family:var(--font-mono);font-size:11px;padding:1px 6px;border:1px solid var(--border-color);border-bottom-width:2px;border-radius:3px;background:var(--paper-card,#fff);color:var(--color)}.paper-pill{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;padding:2px 8px;border:1px solid var(--border-color);border-radius:999px;color:var(--ink-soft);background:var(--paper-card,#fff);letter-spacing:.04em}.paper-pill.accent{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.paper-pill.good{border-color:#2f6b3e;color:#2f6b3e}.paper-pill.warn{border-color:#8a6b1e;color:#8a6b1e}.paper-pill.bad{border-color:#a13a2e;color:#a13a2e}.paper-row{display:grid;grid-template-columns:1fr auto;gap:16px;align-items:start;padding:18px 0;border-bottom:1px solid var(--border-color)}.paper-row:first-child{border-top:1px solid var(--border-color)}.paper-row .row-title{font-family:var(--font-serif);font-size:20px;letter-spacing:-.01em;line-height:1.2}.paper-row .row-title a{color:var(--color)}.paper-row .row-meta{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.03em;margin-top:6px;display:flex;flex-wrap:wrap;gap:14px}.paper-row .row-actions{display:flex;gap:6px;flex-shrink:0}.paper-form-step{display:grid;grid-template-columns:48px 1fr;gap:20px;padding:22px 0;border-bottom:1px solid var(--border-color)}.paper-form-step:first-child{border-top:1px solid var(--border-color)}.paper-form-step .step-num{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);padding-top:4px;letter-spacing:.02em}.paper-form-step .step-title{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;line-height:1.2;margin-bottom:4px}.paper-form-step .step-sub{color:var(--ink-soft);font-size:14px;margin-bottom:14px;text-wrap:pretty}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.paper-switch-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;gap:16px}.paper-switch-row+.paper-switch-row{border-top:1px dashed var(--border-soft)}.paper-switch-row .sw-label{font-weight:500}.paper-switch-row .sw-sub{display:block;font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-page .custom-select,.paper-page .form-control{border-radius:6px;border-color:var(--border-color);font-size:14px;padding:8px 12px;height:auto;background:var(--input-bg);color:var(--input-color)}.paper-page .custom-select:focus,.paper-page .form-control:focus{color:var(--input-color);background:var(--input-bg);border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.custom-select:focus,.form-control:focus,input:focus,select:focus,textarea:focus{color:var(--input-color)!important;background-color:var(--input-bg)!important}.form-control::selection,input::selection,textarea::selection{background:var(--accent-soft);color:var(--input-color)}.dark-mode .form-control::selection,.dark-mode input::selection,.dark-mode textarea::selection{background:rgba(167,178,255,.3);color:var(--input-color)}.btn.btn-ink{background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);font-weight:500;border-radius:6px;padding:8px 14px}.btn.btn-ink:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color);border-color:var(--primary-hover-bg)}.btn.btn-accent{background:var(--accent);color:#fff;border:1px solid var(--accent);font-weight:500;border-radius:6px}.btn.btn-accent:hover{background:#2e3bb8;border-color:#2e3bb8;color:#fff}.paper-page .dashboard-filter-row{display:flex;align-items:center;gap:10px;padding:14px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);margin:18px 0 0;flex-wrap:wrap}.paper-page .dashboard-filter-row .form-control{height:38px;background:var(--paper-card)}.paper-page .dashboard-filter-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.paper-page .dashboard-filter-row .btn-group .btn,.paper-page .dashboard-filter-row .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);height:38px;padding:0 14px;font-size:14px;font-weight:500;border-radius:var(--radius-control,6px);display:inline-flex;align-items:center;gap:6px;line-height:1}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label{color:var(--ink-muted);font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label::after{content:"·";margin-left:6px;color:var(--ink-faint)}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-value{font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .fas{font-size:11px;color:var(--ink-muted)}.paper-page .dashboard-filter-row .btn-group .btn:hover,.paper-page .dashboard-filter-row .dropdown-toggle:hover{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.paper-page .dashboard-filter-row .btn-group{gap:0}.paper-page .dashboard-filter-row .btn-group .btn{border-radius:0;border-right-width:0}.paper-page .dashboard-filter-row .btn-group .btn:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.paper-page .dashboard-filter-row .btn-group .btn:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px;border-right-width:1px}.paper-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--color);color:var(--canvas-bg-color);border-color:var(--color)}.paper-page .dashboard-filter-row .search-wrap{flex:1 1 280px;min-width:220px}.paper-page .quota-row{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;margin:24px 0 0;padding:0;background:0 0;border:none;border-radius:0}.paper-page .quota-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);opacity:1}.paper-page .quota-value{font-family:var(--font-mono);font-size:13px;font-variant-numeric:tabular-nums;color:var(--color)}.paper-page .quota-value .quota-unlimited-tag{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);margin-left:4px}.paper-page .quota-track{height:6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;width:100%;min-width:0}.paper-page .quota-track .quota-fill{height:100%;min-width:2px;border-radius:999px;background:var(--color);transition:width .3s ease}.paper-page .quota-track.quota-warn .quota-fill{background:var(--status-progress)}.paper-page .quota-track.quota-danger .quota-fill{background:var(--status-error)}.paper-page .quota-track.quota-unlimited{background:repeating-linear-gradient(-45deg,var(--paper-bg-alt) 0 4px,var(--border-soft,var(--border-color)) 4px 6px)}.paper-page .repo-list{margin-top:8px}.paper-page .repo-list-item{padding:20px 0;gap:16px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-page .repo-list-item:first-child{border-top:none}.paper-page .repo-list-item-header{gap:10px;margin-bottom:6px}.paper-page .repo-name{font-family:var(--font-mono);font-size:15px;color:var(--color)}.paper-page .repo-source{font-size:13px;color:var(--ink-soft);opacity:1;gap:10px}.paper-page .repo-source a{color:var(--ink-soft);border-bottom:1px dotted var(--border-color)}.paper-page .repo-source a:hover{color:var(--color)}.paper-page .repo-meta{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);opacity:1;gap:16px;margin-top:10px}.paper-page .type-badge{font-family:var(--font-mono);font-size:11px;padding:3px 8px;letter-spacing:.1em}.paper-page .repo-list-item-actions .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;font-size:13px;padding:6px 12px;height:auto}.paper-settings{max-width:1180px;margin:0 auto;padding:48px 32px 80px}.paper-settings .paper-page-title{max-width:14em}.paper-settings-body{display:grid;grid-template-columns:220px 1fr;gap:60px;margin-top:32px;border-top:1px solid var(--border-color);padding-top:28px}.paper-settings-toc{position:sticky;top:32px;align-self:start}.paper-settings-toc-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:12px}.paper-settings-toc nav{display:flex;flex-direction:column;gap:2px}.paper-settings-toc nav a{padding:8px 0 8px 14px;border-left:2px solid transparent;color:var(--ink-soft);font-size:14px;text-decoration:none}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.paper-settings-main{min-width:0;max-width:720px}.paper-settings-section{padding:28px 0;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section:first-child{padding-top:0}.paper-settings-section:last-of-type{border-bottom:none}.paper-settings-section .form-group{margin-bottom:18px}.paper-settings-section .form-check{padding:10px 0 10px 28px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section .form-check:last-child{border-bottom:none}.paper-settings-section .form-check-label{font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--color);cursor:pointer}.paper-settings-section .form-check-input{cursor:pointer;width:16px;height:16px;margin-top:3px;margin-left:-28px;accent-color:var(--color)}.paper-settings-section .form-text{color:var(--ink-soft);font-size:13px;margin-top:4px;max-width:48em}.paper-settings-section .paper-section-copy{margin:-4px 0 14px}.paper-settings-footer{padding-top:24px;display:flex;flex-direction:column;gap:14px}.paper-settings-footer .btn-ink{align-self:flex-start}.paper-settings-actions{display:flex;align-items:center;flex-wrap:wrap;gap:14px}.paper-settings-hint{font-size:13px;color:var(--ink-muted)}.paper-inline-alert{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:var(--radius-control,6px);border:1px solid var(--border-color);background:var(--paper-bg-alt);font-size:13px;color:var(--color)}.paper-inline-alert i{margin-top:2px;color:var(--ink-muted)}.paper-inline-alert-error{border-color:var(--status-error);background:var(--status-error-soft)}.paper-inline-alert-error i{color:var(--status-error)}.paper-account-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);background:var(--paper-card);margin-bottom:20px}.paper-account-card img{flex-shrink:0}.paper-account-identity{flex:1 1 auto;min-width:0}.paper-account-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color)}.paper-account-meta{font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-danger-zone{padding:16px;border:1px solid var(--status-error);border-radius:var(--radius-surface,10px);background:var(--status-error-soft)}.paper-danger-head{font-weight:600;font-size:14px;color:var(--status-error);margin-bottom:6px}.paper-danger-copy{font-size:13px;color:var(--ink-soft);max-width:52em;margin-bottom:12px}.paper-danger-zone .paper-inline-alert{margin-bottom:12px}.btn.btn-outline-danger{background:0 0;color:var(--status-error);border:1px solid var(--status-error);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-danger:hover{background:var(--status-error);color:#fff;border-color:var(--status-error)}.navbar .user-menu{min-width:260px}.navbar .user-menu .dropdown-item{display:flex;align-items:flex-start;gap:10px;padding:8px 10px!important}.navbar .user-menu .dropdown-item i{width:16px;margin-top:3px;font-size:13px;color:var(--ink-muted);text-align:center}.navbar .user-menu .dropdown-item span{display:flex;flex-direction:column;line-height:1.3}.navbar .user-menu .dropdown-item small{font-size:12px;color:var(--ink-muted)}.navbar .user-menu .dropdown-header{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:24px}.paper-settings-toc{position:static}.paper-settings-toc nav{flex-direction:row;flex-wrap:wrap;gap:8px}.paper-settings-toc nav a{border-left:none;border-bottom:2px solid transparent;padding:4px 0}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--color);border-left:none}}.paper-table{display:block;margin-top:20px;background:0 0;border:none;border-top:1px solid var(--border-color);border-radius:0;overflow:visible}.paper-table .paper-table-head,.paper-table .paper-table-row{display:grid;grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 140px 90px 140px 52px;align-items:center;gap:18px;padding:12px 4px}.paper-table.paper-table-conferences .paper-table-head,.paper-table.paper-table-conferences .paper-table-row{grid-template-columns:minmax(280px,2.4fr) 140px 90px 220px 52px}.paper-table.paper-table-repos .paper-table-head,.paper-table.paper-table-repos .paper-table-row{grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px}.paper-table.paper-table-repos.has-bulk .paper-table-head,.paper-table.paper-table-repos.has-bulk .paper-table-row{grid-template-columns:28px minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px;gap:12px}.paper-table .admin-users-row{grid-template-columns:28px minmax(280px,2.4fr) 90px 120px 100px 52px!important;gap:12px!important}.paper-table.paper-table-dashboard .paper-table-head,.paper-table.paper-table-dashboard .paper-table-row{grid-template-columns:minmax(320px,3fr) 190px 90px 170px 52px;gap:20px;padding:8px 4px}.paper-table.paper-table-dashboard .cell-anon .anon-text{gap:2px}.paper-table.paper-table-dashboard .cell-anon .repo-name{padding:0}.paper-table .paper-table-head{background:0 0;border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-muted);padding-top:8px;padding-bottom:8px}.paper-table .paper-table-head .sortable{cursor:pointer;user-select:none;display:inline-flex;align-items:center;gap:6px;background:0 0;border:none;padding:2px 0;margin:0;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit;border-radius:4px}.paper-table .paper-table-head .sortable:hover{color:var(--color)}.paper-table .paper-table-head .sortable.active{color:var(--color)}.paper-table .paper-table-head .sortable i{font-size:10px}.paper-table .paper-table-head .num,.paper-table .paper-table-row .num{text-align:right}.paper-table .paper-table-head .num .sortable{flex-direction:row-reverse}.paper-table .paper-table-row{border-top:1px solid var(--border-soft,var(--border-color));font-size:14px;transition:background-color .12s ease}.paper-table .paper-table-row:hover{background:var(--hover-bg-color)}.paper-table .paper-table-row.row-clickable{cursor:pointer}.paper-table .paper-table-row.repo-inactive>:not(.cell-actions){opacity:.55}.paper-table .paper-table-row.repo-error{background:var(--status-error-soft);border-left:2px solid var(--status-error);padding-left:6px}.paper-table .paper-table-row.repo-error:hover{background:var(--status-error-soft-hover)}.cell-status .status-sub.status-sub-error,.paper-table .cell-status .status-sub-error{color:var(--status-error)}.paper-table .cell-status .status-sub-warn{color:var(--status-progress)}.paper-table .cell-anon{display:flex;align-items:center;gap:12px;min-width:0}.paper-table .cell-anon .type-badge{flex-shrink:0;min-width:52px;justify-content:center}.paper-table .cell-anon .anon-text{min-width:0;display:flex;flex-direction:column;gap:3px}.paper-table .cell-anon .anon-title{display:flex;align-items:center;gap:8px;min-width:0}.paper-table .cell-anon .anon-title .type-badge{margin-left:0}.paper-table .cell-anon .repo-name{font-family:var(--font-mono);font-size:14px;color:var(--color);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:100%;padding:2px 0}.paper-table .cell-anon .repo-name-static{color:var(--ink-muted);font-style:italic}.paper-table .cell-anon .anon-sub{font-family:var(--font-sans);font-size:13px;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:10px;min-width:0}.paper-table .cell-anon .anon-sub .anon-source{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-anon .anon-sub .conf-tag{flex:0 1 auto;min-width:72px;max-width:50%}.paper-table .cell-anon .anon-sub a{color:var(--ink-muted);border-bottom:1px dotted var(--border-color);padding:4px 0;margin:-4px 0}.paper-table .cell-anon .anon-sub a:hover{color:var(--color)}.paper-table .cell-anon .anon-sub .commit-hash{font-family:var(--font-mono);font-size:12px}.paper-table .cell-conf{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-conf span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-status{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;font-size:14px;color:var(--color);min-width:0}.paper-table .cell-status .status-line{display:inline-flex;align-items:center;gap:8px}.paper-table .cell-status .status-sub{flex-basis:100%;font-family:var(--font-sans);font-size:13px;line-height:1.3;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.paper-table .cell-expires{font-family:var(--font-sans);font-size:13px;color:var(--ink-soft)}.paper-table .cell-expires .expires-never{color:var(--ink-muted)}.paper-table .cell-expires .expires-past{color:var(--ink-muted)}.paper-table .empty-dash{color:var(--ink-faint)}.paper-table .cell-actions{display:flex;justify-content:flex-end}.status-dot{width:8px;height:8px;border-radius:999px;display:inline-block;flex-shrink:0;background:var(--status-inactive)}.status-dot.status-ready{background:var(--status-ready)}.status-dot.status-error{background:var(--status-error)}.status-dot.status-preparing,.status-dot.status-progress{background:var(--status-progress)}.status-dot.status-expired,.status-dot.status-removed{background:var(--status-inactive)}.dashboard-page{padding-bottom:96px}.dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin-top:12px;font-size:13px;color:var(--ink-muted)}.dashboard-meta .dashboard-count{font-variant-numeric:tabular-nums}.btn-link-inline{background:0 0;border:none;padding:2px 4px;margin:-2px 0;font:inherit;color:var(--link-color);cursor:pointer;border-radius:4px}.btn-link-inline:hover{color:var(--link-hover-color);text-decoration:underline}.btn.btn-outline-ink{background:0 0;color:var(--color);border:1px solid var(--border-color);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-ink:hover{background:var(--hover-bg-color);color:var(--color);border-color:var(--ink-faint)}.paper-page .dropdown-menu .dropdown-item-danger,.paper-page .dropdown-menu .dropdown-item-danger i{color:var(--status-error)}.paper-page .dropdown-menu .dropdown-item-danger:focus,.paper-page .dropdown-menu .dropdown-item-danger:hover{background:var(--status-error-soft-hover);color:var(--status-error)}.paper-page .dropdown-menu button.dropdown-item{width:100%;text-align:left;background:0 0;border:none}.paper-page .dropdown-menu .dropdown-divider{border-top-color:var(--border-soft,var(--border-color));margin:4px 0}.paper-table .paper-table-skeleton{pointer-events:none}.skeleton{display:block;background:var(--paper-bg-alt);border-radius:4px;position:relative;overflow:hidden}.skeleton::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,var(--hover-bg-color),transparent);animation:skeleton-shimmer 1.4s infinite}.skeleton-line{height:12px}.skeleton-line+.skeleton-line{margin-top:8px}.skeleton-line-sm{height:10px}.skeleton-badge{width:52px;height:22px;border-radius:999px;flex-shrink:0}@keyframes skeleton-shimmer{to{transform:translateX(100%)}}@media (prefers-reduced-motion:reduce){.skeleton::after{animation:none}}.paper-table .paper-table-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:56px 20px;color:var(--ink-muted);text-align:center;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table .paper-table-empty>i{font-size:1.5rem;color:var(--ink-faint)}.paper-table .paper-table-empty-actions{display:flex;gap:8px;margin-top:8px}.bulk-bar{display:flex;align-items:center;gap:8px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:8px 12px;margin:8px 0}.paper-page.admin-page .paper-page-title{font-size:1.5rem;margin:4px 0}.paper-page.admin-page .paper-page-lede{display:none}.paper-page.admin-page .paper-crumbs{margin-bottom:4px}.paper-page.admin-page .admin-nav{margin:6px 0 12px}.admin-filter-toolbar{display:flex;flex-direction:column;gap:6px;margin:8px 0 12px;position:sticky;top:0;z-index:4;background:var(--canvas-bg-color);padding:6px 0;border-bottom:1px solid var(--border-soft,var(--border-color));box-shadow:0 1px 0 var(--canvas-bg-color)}@media (max-width:900px){.admin-filter-toolbar{position:static;box-shadow:none}}.admin-filter-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.admin-filter-row .search-wrap{flex:1;min-width:220px}.admin-filter-row .search-wrap .form-control{height:34px}.admin-filter-inline{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.admin-filter-inline>label{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);margin:0;white-space:nowrap}.admin-filter-inline .form-control-sm{height:28px;padding:2px 8px;font-size:12px}.admin-filter-inline input[type=search].form-control-sm,.admin-filter-inline input[type=text].form-control-sm{width:130px}.admin-filter-inline input[type=date].form-control-sm{width:130px}.admin-filter-inline select.form-control-sm{width:auto;min-width:88px}.admin-filter-inline .arrow{color:var(--ink-muted);font-size:11px}.admin-filter-spacer{flex:1}.admin-active-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px;color:var(--ink-muted)}.admin-active-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 4px 2px 10px;border:1px solid var(--border-color);border-radius:999px;background:var(--hover-bg-color);font-size:12px;color:var(--color)}.admin-active-chip .key{color:var(--ink-muted);font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em}.admin-active-chip button{background:0 0;border:none;cursor:pointer;padding:0 4px;color:var(--ink-muted);font-size:12px;border-radius:50%}.admin-active-chip button:hover{color:#b42318}.admin-search-hint{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);pointer-events:none;border:1px solid var(--border-color);border-radius:4px;padding:1px 5px;background:var(--paper-card)}.admin-filter-row .search-wrap{position:relative}.admin-filter-row .search-wrap .form-control{padding-right:40px}.paper-table-row.row-selected{background:rgba(47,122,68,.06)}.queue-state-pills{display:inline-flex;gap:6px;margin-left:8px;flex-wrap:wrap}.queue-state-pills .pill{font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted)}.queue-state-pills .pill-active{color:#c48a2e;border-color:rgba(196,138,46,.4)}.queue-state-pills .pill-failed{color:#b42318;border-color:rgba(180,35,24,.4)}.queue-state-pills .pill-completed{color:#2f7a44;border-color:rgba(47,122,68,.3)}.queue-state-pills .pill-waiting{color:var(--ink-soft)}.queue-state-pills .pill-delayed{color:var(--ink-muted)}.admin-summary{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0 12px;font-size:13px}.admin-summary .summary-total{font-family:var(--font-serif);font-size:1rem;color:var(--color);margin-right:8px}.admin-summary .summary-meta{color:var(--ink-muted);font-size:12px;margin-right:8px}.admin-summary .summary-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);cursor:pointer;font-size:12px;user-select:none;transition:background-color .1s,border-color .1s}.admin-summary .summary-pill:hover{background:var(--hover-bg-color)}.admin-summary .summary-pill .count{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.admin-summary .summary-pill.active{background:var(--primary-bg);color:var(--primary-color);border-color:var(--primary-bg)}.admin-summary .summary-pill.active .count{color:inherit}.admin-summary .summary-pill.error .count{color:#b42318}.admin-summary .summary-pill.warn .count{color:#c48a2e}.admin-summary .summary-pill.ok .count{color:#2f7a44}.dark-mode .admin-summary .summary-pill.error .count{color:#f08a82}.dark-mode .admin-summary .summary-pill.warn .count{color:#e8b970}.dark-mode .admin-summary .summary-pill.ok .count{color:#7dc894}.dark-mode .queue-state-pills .pill-active{color:#e8b970;border-color:rgba(232,185,112,.4)}.dark-mode .queue-state-pills .pill-failed{color:#f08a82;border-color:rgba(240,138,130,.4)}.dark-mode .queue-state-pills .pill-completed{color:#7dc894;border-color:rgba(125,200,148,.3)}.job-progress{flex:1;height:6px;background:var(--border-soft,var(--border-color));border-radius:999px;overflow:hidden;margin-left:12px;max-width:200px}.job-progress-bar{height:100%;background:#2f7a44;transition:width .3s}.paper-table-empty{padding:48px 4px;text-align:center;color:var(--ink-muted);display:flex;flex-direction:column;align-items:center;gap:8px;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table-empty>i{font-size:1.5rem}.q-header{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:4px}.q-header-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.q-range-btns{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden}.q-range-btns .btn{border:none;border-radius:0;padding:5px 14px;font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);background:var(--paper-card)}.q-range-btns .btn+.btn{border-left:1px solid var(--border-color)}.q-range-btns .btn.active{background:var(--color);color:var(--paper-card)}.q-cards{display:flex;gap:10px;margin:16px 0;flex-wrap:wrap}.q-card{flex:1;min-width:140px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:14px 16px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.q-card:hover{border-color:var(--ink-muted)}.q-card.selected{border-color:var(--color);box-shadow:0 0 0 1px var(--color)}.q-card-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.q-dot{width:8px;height:8px;border-radius:50%;background:#2f7a44;flex-shrink:0}.q-dot-red{background:#b42318}.dark-mode .q-dot{background:#7dc894}.dark-mode .q-dot-red{background:#f08a82}.q-card-name{font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--ink-muted);letter-spacing:.04em}.q-card-count{font-family:var(--font-serif);font-size:2rem;font-weight:400;line-height:1.1;color:var(--color);margin-bottom:6px}.q-card-sub{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.04em}.q-card-bar{height:4px;background:var(--border-color);border-radius:2px;overflow:hidden;margin-top:6px}.q-card-bar-fill{height:100%;background:#3b4ad6;border-radius:2px;transition:width .3s}.dark-mode .q-card-bar-fill{background:#a7b2ff}.q-detail{display:grid;grid-template-columns:1fr 320px;gap:16px;margin-bottom:20px}.q-throughput{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-chart-wrap{position:relative}.q-throughput canvas{width:100%;display:block}.q-chart-tooltip{position:absolute;pointer-events:none;background:var(--paper-card);border:1px solid var(--border-color);border-radius:6px;padding:6px 10px;font-family:var(--font-mono);font-size:11px;line-height:1.6;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.15);z-index:10}.q-chart-tooltip .q-tip-time{color:var(--ink-muted);margin-bottom:2px}.q-chart-tooltip .q-tip-completed{color:#3b4ad6}.q-chart-tooltip .q-tip-failed{color:#b42318}.dark-mode .q-chart-tooltip .q-tip-completed{color:#a7b2ff}.dark-mode .q-chart-tooltip .q-tip-failed{color:#f08a82}.q-chart-crosshair{position:absolute;top:0;width:1px;height:100%;background:var(--ink-muted);opacity:.3;pointer-events:none;z-index:9}.q-stats-panel{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px;display:flex;flex-direction:column}.q-section-label{font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:lowercase;letter-spacing:.04em;margin-bottom:14px}.q-section-right{float:right;text-transform:uppercase;font-size:10px;letter-spacing:.08em}.q-legend-completed{color:#3b4ad6}.q-legend-failed{color:#b42318;margin-left:8px}.q-legend-exec{color:#b8860b;margin-left:8px;letter-spacing:2px}.dark-mode .q-legend-completed{color:#a7b2ff}.dark-mode .q-legend-failed{color:#f08a82}.dark-mode .q-legend-exec{color:#f5c842}.q-chart-tooltip .q-tip-exec{color:#b8860b}.dark-mode .q-chart-tooltip .q-tip-exec{color:#f5c842}.q-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px;flex:1}.q-stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:2px}.q-stat-value{font-family:var(--font-serif);font-size:1.25rem;font-weight:400;color:var(--color);line-height:1.2}.q-stats-actions{display:flex;gap:8px;margin-top:16px;padding-top:14px;border-top:1px solid var(--border-color)}.q-stats-actions .btn{font-family:var(--font-mono);font-size:11px;padding:6px 14px;border-radius:8px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.q-jobs{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-jobs-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:12px}.q-state-filters{display:inline-flex;gap:6px;flex-wrap:wrap}.q-state-toggle{cursor:pointer;display:inline-flex;align-items:center}.q-state-toggle input{display:none}.q-state-chip{font-family:var(--font-mono);font-size:11px;padding:3px 10px;border-radius:10px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);transition:opacity .15s,background .15s;text-transform:capitalize}.q-state-toggle input:checked+.q-state-chip{opacity:1}.q-state-toggle input:not(:checked)+.q-state-chip{opacity:.4;text-decoration:line-through}.q-state-badge,.q-state-chip{font-family:var(--font-mono);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.q-state-badge{display:inline-block;padding:2px 8px;border-radius:8px}.q-state-active{background:#dbeafe;color:#1d4ed8}.q-state-waiting{background:#fef3c7;color:#92400e}.q-state-delayed{background:#e0e7ff;color:#4338ca}.q-state-failed{background:#fee2e2;color:#b91c1c}.q-state-completed{background:#dcfce7;color:#166534}.dark-mode .q-state-active{background:rgba(59,130,246,.2);color:#93bbfd}.dark-mode .q-state-waiting{background:rgba(251,191,36,.15);color:#fbbf24}.dark-mode .q-state-delayed{background:rgba(99,102,241,.2);color:#a5b4fc}.dark-mode .q-state-failed{background:rgba(239,68,68,.2);color:#fca5a5}.dark-mode .q-state-completed{background:rgba(34,197,94,.15);color:#86efac}.q-cell-state{width:120px}.q-delay-hint{display:block;font-size:10px;color:var(--ink-muted);margin-top:2px;font-family:var(--font-mono)}.q-search-row{display:flex;align-items:center;gap:10px;margin-bottom:12px}.q-search-row .form-control{max-width:320px;height:34px}.q-auto-refresh{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap}.q-table{width:100%;border-collapse:collapse}.q-table thead th{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;padding:8px 10px;border-bottom:1px solid var(--border-color);text-align:left;white-space:nowrap}.q-table tbody tr{border-bottom:1px solid var(--border-color);transition:background .1s}.q-table tbody tr:hover{background:var(--paper-bg-alt)}.q-table tbody tr:last-child{border-bottom:none}.q-table tbody td{padding:10px 10px;font-size:.875rem;vertical-align:middle}.q-cell-id{font-family:var(--font-mono);font-size:12px;white-space:nowrap}.q-cell-id{display:flex;align-items:center;gap:8px}.q-chevron{font-size:10px;color:var(--ink-muted);transition:transform .15s;flex-shrink:0}.q-chevron-open{transform:rotate(90deg)}.q-cell-id a{color:var(--color)}.q-cell-payload{font-family:var(--font-mono);font-size:12px;color:var(--color)}.q-payload-detail{color:var(--ink-muted)}.q-cell-num{font-family:var(--font-mono);font-size:12px;text-align:center;white-space:nowrap}.q-cell-progress{min-width:120px}.q-progress-wrap{display:flex;align-items:center;gap:8px}.q-progress-bar{flex:1;height:6px;border-radius:3px;overflow:hidden;background-image:linear-gradient(to right,#3b4ad6 var(--pct,0),var(--border-color) var(--pct,0))}.dark-mode .q-progress-bar{background-image:linear-gradient(to right,#a7b2ff var(--pct,0),var(--border-color) var(--pct,0))}.q-progress-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap;min-width:32px;text-align:right}.q-cell-actions{text-align:right;white-space:nowrap}.q-cell-actions .btn{padding:3px 8px;font-size:11px;background:0 0;border:1px solid var(--border-color);color:var(--ink-muted)}.q-cell-actions .btn:hover{color:var(--color)}.q-row-failed{background:rgba(180,35,24,.04)}.dark-mode .q-row-failed{background:rgba(240,138,130,.06)}.q-error-detail{padding:4px 10px 12px;font-size:12px}.q-error-reason{color:#b42318;font-size:.8125rem;margin-bottom:4px}.dark-mode .q-error-reason{color:#f08a82}.q-toast-error{background:#fbe7e7;color:#b42318;border:1px solid #f3c7c7;border-radius:8px;padding:10px 16px;margin-bottom:12px;font-family:var(--font-mono);font-size:12px;cursor:pointer;display:flex;align-items:center;gap:8px}.dark-mode .q-toast-error{background:rgba(240,138,130,.1);color:#f08a82;border-color:rgba(240,138,130,.25)}.q-error-stack{font-size:.75rem;max-height:120px;overflow:auto;margin:4px 0 0;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:6px;padding:8px 10px}.q-row-expanded>td{border-bottom-color:transparent}.q-detail-row>td{padding:0 10px 14px!important;border-bottom:1px solid var(--border-color)}.q-job-detail{background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:8px;padding:14px 16px}.q-job-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px 20px;margin-bottom:10px}.q-job-detail-item{display:flex;flex-direction:column;gap:2px}.q-job-detail-label{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.q-job-detail-value{font-family:var(--font-mono);font-size:12px;color:var(--color);word-break:break-all}.q-job-detail-value a{color:var(--color)}.q-job-detail-error{margin:8px 0}.q-job-detail-actions{display:flex;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color)}.q-job-detail-actions .btn{font-family:var(--font-mono);font-size:11px;padding:5px 12px;border-radius:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}@media (max-width:900px){.q-detail{grid-template-columns:1fr}.q-cards{flex-direction:column}.q-card{min-width:100%}.q-jobs-header{flex-direction:column;align-items:flex-start}.q-tabs{flex-wrap:wrap}.q-search-row{flex-wrap:wrap}.q-search-row .form-control{max-width:100%;flex:1}.q-table{font-size:12px}.q-header{flex-direction:column}.q-job-detail-grid{grid-template-columns:1fr 1fr}}@media (max-width:900px){.paper-table .paper-table-head{display:none}.paper-table .admin-users-row,.paper-table .paper-table-row,.paper-table.paper-table-conferences .paper-table-row,.paper-table.paper-table-repos .paper-table-row{display:flex!important;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:14px 0;grid-template-columns:none!important}.paper-table .cell-anon{flex:1 1 calc(100% - 52px);min-width:0;order:1}.paper-table .cell-actions{flex:0 0 auto;order:2;align-self:center}.paper-table .cell-conf,.paper-table .cell-expires,.paper-table .cell-status,.paper-table .cell-views{order:3;font-size:13px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;text-align:left}.paper-table .cell-status{flex-wrap:nowrap;gap:6px;min-width:0}.paper-table .cell-status .status-sub{flex-basis:auto;font-size:13px;line-height:inherit}.paper-table .cell-status .status-sub::before{content:"·";margin-right:6px;color:var(--ink-faint)}.paper-table .cell-conf{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views.num{text-align:left}.paper-table .paper-table-skeleton .cell-expires,.paper-table .paper-table-skeleton .cell-status,.paper-table .paper-table-skeleton .cell-views{flex:1 1 30%}.paper-table .cell-views::before{content:'\f06e';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table .cell-expires::before{content:'\f017';font-family:'Font Awesome 5 Free';font-weight:400;font-size:10px;color:var(--ink-muted)}.paper-table .cell-conf::before{content:'\f51c';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table-dashboard .cell-conf::before{content:none}.paper-table .cell-conf:has(.empty-dash),.paper-table .cell-expires:has(.empty-dash){display:none}.paper-table .cell-expires::before,.paper-table .cell-views::before{color:var(--ink-faint)}}.paper-page .dropdown-menu{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);box-shadow:0 12px 28px rgba(26,24,21,.08);padding:6px;min-width:220px;font-family:var(--font-sans);font-size:14px;color:var(--color);margin-top:6px}.paper-page .dropdown-menu .dropdown-header{font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px;font-weight:500}.paper-page .dropdown-menu .dropdown-item{border-radius:6px;padding:8px 10px;color:var(--color);font-size:14px;display:flex;align-items:center;gap:8px}.paper-page .dropdown-menu .dropdown-item:focus,.paper-page .dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .dropdown-menu .dropdown-item i{width:16px;font-size:13px;color:var(--ink-muted)}.paper-page .dropdown-menu .form-check.dropdown-item{padding:8px 10px 8px 36px!important;position:relative}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-input{position:absolute;left:12px;top:50%;transform:translateY(-50%);margin:0;width:16px;height:16px;accent-color:var(--color);cursor:pointer}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-label{font-family:var(--font-sans);font-size:14px;color:var(--color);font-weight:400;margin:0;cursor:pointer}.btn.btn-icon-dots{width:32px;height:32px;padding:0;border:1px solid transparent;background:0 0;color:var(--ink-muted);border-radius:6px;display:inline-flex;align-items:center;justify-content:center;line-height:1}.btn.btn-icon-dots:focus,.btn.btn-icon-dots:hover,.btn.btn-icon-dots[aria-expanded=true]{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.btn.btn-icon-dots::after{display:none}.btn.btn-icon-dots i{font-size:15px}.paper-page .repo-list-empty{border-top:none;padding:56px 20px;color:var(--ink-muted)}.paper-page .filter-chip{background:var(--paper-bg-alt);color:var(--color);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:4px 10px;border-radius:999px}@media (max-width:768px){.paper-page .paper-page-title{font-size:clamp(1.4rem,6vw,1.9rem);margin:4px 0 2px}.paper-page .paper-page-lede{font-size:13px;line-height:1.4;margin-bottom:0}.paper-page .btn-ink{padding:6px 12px;font-size:13px}.paper-page .quota-row{grid-template-columns:1fr;gap:12px;padding:0;margin:16px 0 0}.paper-page .dashboard-filter-row{padding:10px 0;margin-top:12px;gap:8px}.paper-page .quota-header{flex-direction:row;align-items:baseline;gap:8px}.paper-page .quota-value{white-space:nowrap}.paper-page .dashboard-filter-controls{width:100%}.paper-page .dashboard-filter-controls .btn-group{flex:1 1 100%;display:flex}.paper-page .dashboard-filter-controls .btn-group .btn{flex:1;justify-content:center}.paper-page .dashboard-filter-controls .dropdown{flex:1 1 0;min-width:0}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{width:100%;justify-content:space-between}.paper-page .dashboard-filter-controls .dropdown .filter-btn-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media (max-width:480px){.paper-page .paper-page-lede{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}}.empty-state{text-align:center;padding:40px 20px;opacity:.6}.empty-state i{font-size:2rem;margin-bottom:10px;display:block}.paper-page .progress{height:10px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;margin-bottom:20px}.paper-page .progress .progress-bar{background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:10px;line-height:10px}.paper-page .progress .progress-bar.bg-success{background:var(--status-ready)!important}.paper-page .progress .progress-bar.bg-warning{background:var(--status-progress)!important;color:#fff}.paper-page .progress .progress-bar.bg-danger{background:var(--status-error)!important}.paper-page .progress .progress-bar.bg-dark{background:var(--ink-faint)!important}.paper-page .form>h5,.paper-page form>h5,.paper-page>h5{font-family:var(--font-mono);font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin:24px 0 8px}.paper-page .accordion .card{background:var(--paper-card,var(--sidebar-bg-color));border:1px solid var(--border-color);border-radius:8px!important;margin-bottom:8px;overflow:hidden}.paper-page .accordion .card+.card{border-top:1px solid var(--border-color)}.paper-page .accordion .card-header{background:0 0;border:none;padding:0}.paper-page .accordion .card-header .btn{color:var(--color)!important;font-family:var(--font-sans);font-weight:500;font-size:14px;padding:14px 18px!important;background:0 0!important;border:none!important;position:relative}.paper-page .accordion .card-header .btn::after{content:"+";position:absolute;right:18px;font-family:var(--font-serif);font-size:20px;color:var(--ink-muted)}.paper-page .accordion .card-header .btn:not(.collapsed)::after{content:"–"}.paper-page .accordion .card-body{padding:6px 18px 18px!important;border-top:1px solid var(--border-soft)}.paper-page .accordion .form-check-label{color:var(--color);font-weight:500;font-size:14px}.paper-page .accordion .form-text{color:var(--ink-muted);font-size:12px;margin-top:2px}.faq-section .panel-body code{font-family:var(--font-mono);font-size:13px;padding:1px 6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:3px;color:var(--color)}.faq-section .panel-body a{color:var(--accent)}@media (max-width:820px){.paper-faq-body{grid-template-columns:1fr;gap:24px}.paper-faq-toc{position:static}}.paper-footer{margin-top:80px;padding:56px max(20px,calc((100vw - 1200px)/ 2)) 28px;border-top:1px solid var(--border-color);background:var(--canvas-bg-color);font-family:var(--font-sans)}.paper-footer-inner{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:40px}.paper-footer-brand .paper-footer-mark{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--color)}.paper-footer-brand .paper-footer-mark em{font-style:italic;font-weight:400}.paper-footer-tag{margin-top:10px;color:var(--ink-soft);font-size:14px;line-height:1.55;max-width:340px}.paper-footer-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.1em;text-transform:uppercase;margin-bottom:14px}.paper-footer-col a{display:block;color:var(--color);font-size:14px;padding:4px 0;text-decoration:none}.paper-footer-col a:hover{color:var(--accent)}.paper-footer-rule{height:1px;background:var(--border-color);margin:40px 0 16px}.paper-footer-foot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--ink-muted);font-family:var(--font-mono);letter-spacing:.02em}.paper-footer-foot .paper-footer-meta{font-family:var(--font-serif);font-style:italic;font-size:14px;letter-spacing:0;color:var(--ink-soft)}@media (max-width:768px){.paper-footer-inner{grid-template-columns:1fr 1fr}}.file.folder.truncated .truncated-warning{color:#d39e00;margin-left:4px;font-size:.85em;flex-shrink:0}.file.folder.truncated>a{color:#d39e00}body{--bucket-error-bg:#FCEDED;--bucket-error-fg:#8A1F1F;--bucket-error-bd:#F0C4C4;--bucket-error-dot:#B53737;--bucket-warn-bg:#FFF3DF;--bucket-warn-fg:#7A4D00;--bucket-warn-bd:#F0D8A0;--bucket-warn-dot:#B07A2F;--bucket-info-bg:#EAF2EC;--bucket-info-fg:#2C5D3A;--bucket-info-bd:#C5DCCD;--bucket-info-dot:#5B8D6B;--card-shadow:0 1px 2px rgba(26, 24, 21, 0.04),0 4px 14px rgba(26, 24, 21, 0.05);--card-shadow-hover:0 1px 2px rgba(26, 24, 21, 0.06),0 8px 24px rgba(26, 24, 21, 0.08)}.dark-mode{--bucket-error-bg:rgba(255, 139, 123, 0.10);--bucket-error-fg:#FF8B7B;--bucket-error-bd:rgba(255, 139, 123, 0.28);--bucket-error-dot:#FF8B7B;--bucket-warn-bg:rgba(255, 211, 122, 0.10);--bucket-warn-fg:#FFD37A;--bucket-warn-bd:rgba(255, 211, 122, 0.28);--bucket-warn-dot:#FFD37A;--bucket-info-bg:rgba(152, 200, 168, 0.10);--bucket-info-fg:#98C8A8;--bucket-info-bd:rgba(152, 200, 168, 0.28);--bucket-info-dot:#98C8A8;--card-shadow:0 1px 2px rgba(0, 0, 0, 0.35),0 6px 18px rgba(0, 0, 0, 0.30);--card-shadow-hover:0 2px 4px rgba(0, 0, 0, 0.45),0 12px 28px rgba(0, 0, 0, 0.40)}.errors-page .errors-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:4px 0 8px}.errors-page .errors-actions{display:flex;gap:6px}.errors-page .kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin:14px 0 18px}.errors-page .kpi-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease,transform 160ms ease}.errors-page .kpi-card:hover{box-shadow:var(--card-shadow-hover)}.errors-page .kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.errors-page .kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.errors-page .kpi-card.kpi-error .kpi-value{color:var(--bucket-error-fg)}.errors-page .kpi-card.kpi-warn .kpi-value{color:var(--bucket-warn-fg)}.errors-page .kpi-card.kpi-info .kpi-value{color:var(--bucket-info-fg)}.errors-page .kpi-sub{font-size:.75rem;color:var(--ink-muted);font-style:italic}.errors-page .kpi-sub.up{color:var(--bucket-error-fg);font-style:normal}.errors-page .kpi-sub.down{color:var(--bucket-info-fg);font-style:normal}.errors-page .dropped-warn{color:var(--bucket-error-fg);font-weight:600;font-style:normal}.errors-page .volume-chart{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;margin-bottom:18px;box-shadow:var(--card-shadow)}.errors-page .volume-head{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}.errors-page .volume-legend{display:flex;gap:14px;align-items:center;text-transform:none;letter-spacing:0;font-family:var(--font-sans)}.errors-page .volume-legend .dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px;vertical-align:middle}.errors-page .dot.dot-error{background:var(--bucket-error-dot)}.errors-page .dot.dot-warn{background:var(--bucket-warn-dot)}.errors-page .dot.dot-info{background:var(--bucket-info-dot)}.errors-page .volume-bars{display:flex;align-items:flex-end;gap:4px;height:80px}.errors-page .volume-bar{display:flex;flex-direction:column-reverse;flex:1 1 0;min-width:6px;height:100%}.errors-page .volume-bar .seg{display:block;width:100%}.errors-page .seg.seg-error{background:var(--bucket-error-dot)}.errors-page .seg.seg-warn{background:var(--bucket-warn-dot)}.errors-page .seg.seg-info{background:var(--bucket-info-dot);opacity:.7}.errors-page .errors-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}.errors-page .seg-tabs{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden;background:var(--paper-card)}.errors-page .seg-tabs button{background:0 0;border:none;padding:6px 14px;font-size:.875rem;cursor:pointer;color:var(--color);font-family:var(--font-sans)}.errors-page .seg-tabs button+button{border-left:1px solid var(--border-color)}.errors-page .seg-tabs button.active{background:var(--primary-bg);color:var(--primary-color)}.errors-page .errors-toolbar .search-wrap{position:relative;flex:1 1 320px;min-width:220px}.errors-page .errors-toolbar .search-wrap input{width:100%;padding:6px 10px 6px 32px;border:1px solid var(--border-color);border-radius:8px;font-family:var(--font-mono);font-size:.8125rem;background:var(--input-bg);color:var(--input-color)}.errors-page .errors-toolbar .search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--ink-muted);font-size:.875rem}.errors-page .errors-toolbar .filter-count{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:.75rem;color:var(--ink-muted)}.errors-page .errors-toolbar .select-wrap{display:inline-flex;align-items:center;gap:6px}.errors-page .errors-toolbar .select-wrap label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin:0}.errors-page .errors-toolbar .select-wrap select{background:var(--input-bg);color:var(--input-color);border:1px solid var(--border-color);border-radius:8px}.errors-page .errors-toolbar .autoref{display:inline-flex;gap:6px;align-items:center;font-size:.8125rem;color:var(--color);cursor:pointer;margin:0}.errors-page .btn-icon{width:32px;padding:4px 0}.errors-page .errors-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;overflow:hidden;box-shadow:var(--card-shadow)}.errors-page .errors-list-head,.errors-page .errors-row-main{display:grid;grid-template-columns:110px 100px 100px 1fr 60px 70px;gap:16px;padding:18px 20px;align-items:start}.errors-page .errors-list-head{padding:12px 20px;align-items:center}.errors-page .errors-list-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.errors-page .errors-row{border-bottom:1px solid var(--border-soft)}.errors-page .errors-row:last-child{border-bottom:none}.errors-page .errors-row.open{background:var(--paper-bg-alt)}.errors-page .errors-row-main{cursor:pointer}.errors-page .errors-row-main:hover{background:var(--hover-bg-color)}.errors-page .col-when .when-rel{font-size:.9375rem;color:var(--color);font-variant-numeric:tabular-nums}.errors-page .col-when .when-abs{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-muted);font-variant-numeric:tabular-nums;margin-top:2px}.errors-page .col-sev{display:flex;align-items:center;gap:8px}.errors-page .sev-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.errors-page .sev-dot.sev-error{background:var(--bucket-error-dot)}.errors-page .sev-dot.sev-warn{background:var(--bucket-warn-dot)}.errors-page .sev-dot.sev-info{background:var(--bucket-info-dot)}.errors-page .sev-label{font-family:var(--font-mono);font-size:.75rem;letter-spacing:.08em;color:var(--color)}.errors-page .pill-module{display:inline-block;font-family:var(--font-mono);font-size:.75rem;background:var(--paper-bg-alt);color:var(--ink-soft);border:1px solid var(--border-color);padding:3px 10px;border-radius:6px}.errors-page .col-msg .msg-code{font-family:var(--font-mono);font-size:1rem;color:var(--color);font-weight:600}.errors-page .col-msg .msg-context{color:var(--ink-muted);font-style:italic;font-size:.875rem;margin-left:10px}.errors-page .col-msg .msg-detail{color:var(--ink-soft);font-family:var(--font-mono);font-size:.8125rem;margin-left:10px}.errors-page .col-msg .msg-url{color:var(--ink-muted);font-family:var(--font-mono);font-size:.8125rem;margin-top:6px;word-break:break-all}.errors-page .count-pill{display:inline-block;padding:2px 8px;border-radius:4px;background:var(--primary-bg);color:var(--primary-color);font-family:var(--font-mono);font-size:.75rem;font-variant-numeric:tabular-nums}.errors-page .count-pill.count-pill-muted{background:0 0;color:var(--ink-muted);border:1px solid var(--border-color)}.errors-page .status-pill{display:inline-block;padding:2px 10px;border-radius:4px;font-family:var(--font-mono);font-size:.8125rem;font-variant-numeric:tabular-nums;border:1px solid transparent}.errors-page .status-pill.status-error{background:var(--bucket-error-bg);color:var(--bucket-error-fg);border-color:var(--bucket-error-bd)}.errors-page .status-pill.status-warn{background:var(--bucket-warn-bg);color:var(--bucket-warn-fg);border-color:var(--bucket-warn-bd)}.errors-page .status-pill.status-info{background:var(--bucket-info-bg);color:var(--bucket-info-fg);border-color:var(--bucket-info-bd)}.errors-page .errors-row-detail{padding:0 16px 16px}.errors-page .detail-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border-color);margin-bottom:12px}.errors-page .detail-tabs button{background:0 0;border:0;border-bottom:2px solid transparent;padding:8px 12px;font-size:.875rem;cursor:pointer;color:var(--ink-muted);font-family:var(--font-sans)}.errors-page .detail-tabs button.active{color:var(--color);border-bottom-color:var(--color)}.errors-page .detail-body{display:grid;grid-template-columns:1fr 260px;gap:20px}.errors-page .detail-main pre{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;font-family:var(--font-mono);font-size:.875rem;line-height:1.7;color:var(--color);max-height:26em;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;margin:0;box-shadow:var(--card-shadow)}.errors-page .related-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;max-height:22em;overflow:auto;box-shadow:var(--card-shadow)}.errors-page .stack-pre{line-height:1.45;white-space:pre;overflow-x:auto}.errors-page .related-row{display:flex;gap:10px;padding:6px 12px;align-items:center;border-bottom:1px solid var(--border-soft);font-size:.8125rem}.errors-page .related-row:last-child{border-bottom:none}.errors-page .detail-actions{display:flex;gap:6px;align-items:center;margin-top:10px}.errors-page .copy-hint{font-size:.75rem;color:var(--bucket-info-fg)}.errors-page .detail-aside{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px;box-shadow:var(--card-shadow)}.errors-page .aside-block+.aside-block{margin-top:16px}.errors-page .aside-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin-bottom:4px}.errors-page .aside-value{font-family:var(--font-serif);font-size:1rem;color:var(--color);word-break:break-word;line-height:1.3}.errors-page .aside-value.mono{font-family:var(--font-mono);font-size:.8125rem}.errors-page .aside-sub{color:var(--ink-muted);font-style:italic;font-size:.8125rem;font-family:var(--font-sans)}.errors-page .errors-pager{display:flex;justify-content:space-between;align-items:center;padding:10px 0;color:var(--ink-muted);font-size:.875rem}@media (max-width:720px){.errors-page .errors-list-head,.errors-page .errors-row-main{grid-template-columns:80px 80px 1fr 60px}.errors-page .errors-list-head .col-mod,.errors-page .errors-list-head .col-sev,.errors-page .errors-row-main .col-mod,.errors-page .errors-row-main .col-sev{display:none}.errors-page .detail-body{grid-template-columns:1fr}}.overview-page .ov-header{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:2px}.overview-page .ov-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-left:6px;vertical-align:middle}.overview-page .ov-dot-ok{background:#2f7a44}.overview-page .ov-dot-warn{background:#c48a2e}.overview-page .ov-dot-idle{background:var(--ink-muted)}.dark-mode .overview-page .ov-dot-ok{background:#7dc894}.dark-mode .overview-page .ov-dot-warn{background:#e8b970}.overview-page .ov-kpi-row{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;margin:16px 0 22px}.overview-page .ov-kpi-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease}.overview-page .ov-kpi-card:hover{box-shadow:var(--card-shadow-hover)}.overview-page .ov-kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.overview-page .ov-kpi-value.ov-val-warn{color:#b42318}.dark-mode .overview-page .ov-kpi-value.ov-val-warn{color:#f08a82}.overview-page .ov-kpi-sub{font-size:.75rem;color:var(--ink-muted);margin-top:2px}.overview-page .ov-daily-row{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:-4px 0 22px}.overview-page .ov-daily-card{background:var(--primary-bg);border:1px solid var(--border-color);border-radius:12px;padding:16px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-daily-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-daily-value{font-family:var(--font-serif);font-size:2.5rem;font-weight:400;line-height:1;color:var(--accent,#3b4ad6);margin-top:6px}.overview-page .ov-daily-sub{font-size:.75rem;color:var(--ink-muted);margin-top:5px}.dark-mode .overview-page .ov-daily-card{background:var(--paper-card)}.dark-mode .overview-page .ov-daily-value{color:#a7b2ff}.overview-page .ov-chart-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:18px}.overview-page .ov-chart-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px 14px;box-shadow:var(--card-shadow)}.overview-page .ov-chart-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.overview-page .ov-chart-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-chart-legend{font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);display:flex;align-items:center;gap:5px}.overview-page .ov-dot-legend{display:inline-block;width:8px;height:8px;border-radius:50%}.overview-page .ov-dot-accent{background:var(--accent,#3b4ad6)}.overview-page .ov-dot-ok-fill{background:#2f7a44}.overview-page .ov-dot-user-fill{background:#8b5e2e}.overview-page .ov-dot-new-user-fill{background:#c48a2e}.dark-mode .overview-page .ov-dot-ok-fill{background:#7dc894}.dark-mode .overview-page .ov-dot-user-fill{background:#d0a15f}.dark-mode .overview-page .ov-dot-new-user-fill{background:#e8b970}.overview-page .ov-spark-bars{display:flex;align-items:flex-end;gap:3px;height:140px}.overview-page .ov-spark-col{flex:1;display:flex;align-items:flex-end;height:100%;position:relative}.overview-page .ov-spark-fill{width:100%;background:var(--accent,#3b4ad6);border-radius:2px 2px 0 0;transition:height .3s ease;opacity:.55}.overview-page .ov-spark-fill-alt{background:#2f7a44}.overview-page .ov-spark-fill-user{background:#8b5e2e}.overview-page .ov-spark-fill-new-user{background:#c48a2e}.dark-mode .overview-page .ov-spark-fill-alt{background:#7dc894}.dark-mode .overview-page .ov-spark-fill-user{background:#d0a15f}.dark-mode .overview-page .ov-spark-fill-new-user{background:#e8b970}.overview-page .ov-spark-col:hover .ov-spark-fill{opacity:1}.overview-page .ov-spark-col.has-tip::after{content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%) translateY(4px);z-index:10;padding:6px 8px;border-radius:6px;background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:.6875rem;line-height:1;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip::before{content:"";position:absolute;left:50%;bottom:calc(100% + 4px);transform:translateX(-50%) translateY(4px);z-index:10;border:5px solid transparent;border-top-color:var(--color);opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip:hover::after,.overview-page .ov-spark-col.has-tip:hover::before{opacity:1;transform:translateX(-50%) translateY(0)}.overview-page .ov-spark-x{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);margin-top:6px}.overview-page .ov-triple-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:18px}.overview-page .ov-panel-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-panel-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px}.overview-page .ov-panel-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-panel-meta{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted)}.overview-page .ov-panel-foot{margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color);font-size:.8125rem}.overview-page .ov-panel-foot a{color:var(--link-color);text-decoration:none}.overview-page .ov-panel-foot a:hover{text-decoration:underline}.overview-page .ov-performance{min-width:0;margin:22px 0}.overview-page .ov-performance-head{align-items:center;flex-wrap:wrap;gap:12px 20px}.overview-page .ov-performance-head h2{margin:0 0 4px}.overview-page .ov-performance-note{margin:0 0 12px;font-size:12px;line-height:1.5;color:var(--ink-muted)}.overview-page .ov-performance-head .ov-performance-note{margin:0}.overview-page .ov-performance-window{display:flex;align-items:center;gap:8px;flex-shrink:0}.overview-page .ov-performance-window label{margin:0;font-size:12px;color:var(--ink-muted)}.overview-page .ov-performance-window select{width:auto}.overview-page .ov-performance-tabs{margin:0 0 16px;gap:4px}.overview-page .ov-performance-tabs .paper-tab{white-space:nowrap}.overview-page .ov-metrics-scroll{max-width:100%;overflow-x:auto;border:1px solid var(--border-color);border-radius:var(--radius-control,8px)}.overview-page .ov-metrics-table{width:100%;border-collapse:collapse;color:var(--color);font-size:13px;line-height:1.5;font-variant-numeric:tabular-nums}.overview-page .ov-metrics-table td,.overview-page .ov-metrics-table th{padding:10px 12px;border-bottom:1px solid var(--border-color);vertical-align:middle;white-space:nowrap}.overview-page .ov-metrics-table thead th{background:var(--paper-bg-alt);color:var(--ink-muted);font-size:12px;font-weight:500}.overview-page .ov-metrics-table .num{text-align:right}.overview-page .ov-metrics-table tr:last-child>*{border-bottom:0}.overview-page .ov-metrics-table thead tr:last-child>*{border-bottom:1px solid var(--border-color)}.overview-page .ov-metrics-table tbody tr:hover{background:var(--hover-bg-color)}.overview-page .ov-metrics-table .ov-metric-name{min-width:190px;max-width:280px;text-align:left;white-space:normal;overflow-wrap:anywhere;font-weight:500}.overview-page .ov-metrics-table small{display:block;margin-top:3px;font-size:11px;font-weight:400;color:var(--ink-muted)}.overview-page .ov-metrics-table small .ui-icon{width:12px;height:12px}.overview-page .ov-metric-warning-row{background:rgba(196,138,46,.07)}.overview-page .ov-metric-warn,.overview-page .ov-metrics-table small.ov-metric-warn{color:#946519}.dark-mode .overview-page .ov-metric-warn,.dark-mode .overview-page .ov-metrics-table small.ov-metric-warn{color:#e8b970}.overview-page .ov-performance-message{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:10px 12px;margin:0 0 16px;border:1px solid var(--border-color);border-radius:var(--radius-control,8px);font-size:13px;line-height:1.5}.overview-page .ov-performance-message span{flex:1;min-width:160px}.overview-page .ov-performance-warning{background:rgba(196,138,46,.07)}.overview-page .ov-performance-empty{margin:0;padding:24px 12px;text-align:center;font-size:13px;color:var(--ink-muted)}.overview-page .ov-performance-help{margin-top:16px;font-size:12px;line-height:1.6;color:var(--ink-muted)}.overview-page .ov-performance-help summary{width:fit-content;cursor:pointer}.overview-page .ov-performance-help p{margin:8px 0 0;max-width:80ch}@media (max-width:575px){.overview-page .ov-performance{padding:16px 12px}.overview-page .ov-performance-window{width:100%}.overview-page .ov-performance-window select{flex:1;min-width:0}.overview-page .ov-performance-tabs .paper-tab{flex:1;padding:10px 8px}}.overview-page .ov-stacked-bar{display:flex;height:18px;border-radius:6px;overflow:hidden;margin-bottom:14px}.overview-page .ov-bar-seg{min-width:2px;transition:width .4s ease}.overview-page .ov-bar-ready{background:#2f7a44}.overview-page .ov-bar-preparing{background:#c48a2e}.overview-page .ov-bar-error{background:#b42318}.overview-page .ov-bar-expired{background:#8a857c}.overview-page .ov-bar-removed{background:#b5afa2}.dark-mode .overview-page .ov-bar-ready{background:#7dc894}.dark-mode .overview-page .ov-bar-preparing{background:#e8b970}.dark-mode .overview-page .ov-bar-error{background:#f08a82}.dark-mode .overview-page .ov-bar-expired{background:#6b665e}.dark-mode .overview-page .ov-bar-removed{background:#4a453e}.overview-page .ov-bar-legend{display:flex;flex-direction:column;gap:6px}.overview-page .ov-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;text-decoration:none;color:inherit}.overview-page .ov-legend-item:hover{text-decoration:none;color:inherit}.overview-page .ov-swatch{display:inline-block;width:12px;height:12px;border-radius:3px;flex-shrink:0}.overview-page .ov-legend-n{margin-left:auto;font-family:var(--font-mono);font-size:.8125rem;font-weight:600}.overview-page .ov-error-bars{display:flex;flex-direction:column;gap:12px}.overview-page .ov-ebar-row{display:flex;align-items:center;gap:10px}.overview-page .ov-ebar-label{width:30px;flex-shrink:0;font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;color:var(--ink-muted)}.overview-page .ov-ebar-track{flex:1;height:10px;background:var(--hover-bg-color);border-radius:5px;overflow:hidden}.overview-page .ov-ebar-fill{height:100%;border-radius:5px;transition:width .4s ease}.overview-page .ov-ebar-error{background:#b42318}.overview-page .ov-ebar-warn{background:#c48a2e}.overview-page .ov-ebar-info{background:var(--accent,#3b4ad6)}.dark-mode .overview-page .ov-ebar-error{background:#f08a82}.dark-mode .overview-page .ov-ebar-warn{background:#e8b970}.overview-page .ov-ebar-n{width:36px;text-align:right;font-family:var(--font-mono);font-size:.8125rem;font-weight:600;flex-shrink:0}.overview-page .ov-routes-table{display:flex;flex-direction:column}.overview-page .ov-route-row{display:grid;grid-template-columns:1fr 60px 60px 60px;padding:8px 0;border-bottom:1px solid var(--border-soft,var(--border-color));text-decoration:none;color:inherit;font-size:.875rem;align-items:center}.overview-page .ov-route-row:last-child{border-bottom:none}.overview-page .ov-route-row:hover{background:var(--hover-bg-color);text-decoration:none;color:inherit}.overview-page .ov-route-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);border-bottom:1px solid var(--border-color)}.overview-page .ov-route-head:hover{background:0 0}.overview-page .ov-route-name{font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-n{text-align:right;font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-lat{color:var(--ink-muted)}.overview-page .ov-n-bad{color:#b42318;font-weight:600}.dark-mode .overview-page .ov-n-bad{color:#f08a82}.overview-page .ov-services-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;box-shadow:var(--card-shadow);margin-bottom:18px}.overview-page .ov-services-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:16px}.overview-page .ov-services-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.overview-page .ov-svc{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:1px solid var(--border-soft,var(--border-color));border-radius:10px}.overview-page .ov-svc-dot{width:10px;height:10px;border-radius:50%;margin-top:3px;flex-shrink:0}.overview-page .ov-svc-info{display:flex;flex-direction:column;gap:1px;flex:1}.overview-page .ov-svc-name{font-family:var(--font-mono);font-size:.875rem;font-weight:600}.overview-page .ov-svc-meta{font-size:.75rem;color:var(--ink-muted)}.overview-page .ov-svc-detail{font-size:.75rem;color:var(--ink-muted);white-space:nowrap}@media (max-width:900px){.overview-page .ov-kpi-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-daily-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-triple-row{grid-template-columns:1fr}}@media (max-width:720px){.overview-page .ov-kpi-row{grid-template-columns:repeat(2,1fr)}.overview-page .ov-daily-row{grid-template-columns:1fr}.overview-page .ov-chart-row{grid-template-columns:1fr}.overview-page .ov-header{flex-direction:column;gap:8px}}@media (max-width:480px){.overview-page .ov-kpi-row{grid-template-columns:1fr 1fr}.overview-page .ov-services-grid{grid-template-columns:1fr 1fr}}.dashboard-heading-actions{display:flex;flex-direction:column;align-items:flex-end;gap:8px;padding-bottom:12px}.dashboard-heading-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px}.dashboard-connections-link{display:inline-flex;align-items:center;gap:7px;min-height:32px;color:var(--ink-muted);font-size:12px;line-height:1.5}.dashboard-connections-link:hover{color:var(--accent);text-decoration:none}.dashboard-connections-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:2px}@media (max-width:767px){.dashboard-heading-actions{align-items:flex-start;padding-bottom:0;gap:4px}.dashboard-connections-link{min-height:44px}}.paper-settings-connection-link{display:flex;align-items:center;gap:12px;padding:18px 0;color:var(--color);font-size:14px}.paper-settings-connection-link>i{color:var(--ink-muted);font-size:18px}.paper-settings-connection-link>span:first-of-type{flex:1}.paper-settings-connection-link small{display:block;margin-top:4px;color:var(--ink-muted);font-size:12px}.paper-settings-connection-link:hover{color:var(--accent);text-decoration:none}.paper-settings-connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.connections-heading{margin-bottom:36px}.connections-heading .paper-page-title{font-size:clamp(38px,4.5vw,56px);margin-bottom:12px}.connections-heading .paper-page-lede{font-size:15px}.connections-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:56px;align-items:start;border-top:1px solid var(--border-color);padding-top:28px}.connections-grid>section{min-width:0}.connection-title,.connection-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.connection-top{margin-bottom:24px;min-height:28px}.connection-top>i{color:var(--ink-muted);font-size:24px}.connection-top>.fa-key{font-size:18px}.connection-title{margin-bottom:10px}.connections-page h2{font-family:inherit;font-size:22px;font-weight:600;letter-spacing:-.5px;margin:0}.connections-page p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.connection-badge{background:var(--accent-soft);color:var(--accent);font-size:11px;font-weight:600;border-radius:5px;padding:4px 8px;white-space:nowrap}.connection-badge-muted{background:var(--paper-bg-alt);color:var(--ink-muted)}.connection-status{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-muted)}.connection-status::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor}.connection-status.is-connected{color:var(--status-ready)}.connection-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin:22px 0 16px}.connections-page .btn{font-size:13px;padding:9px 13px;white-space:normal}.connection-revoke p,.connections-page .connection-help{font-size:12px}.connection-link{display:inline-flex;align-items:center;gap:8px;border:0;padding:0;background:0 0;color:var(--accent);font-size:13px;line-height:1.6;font-weight:500;text-align:left;cursor:pointer}.connection-link:hover{color:var(--link-hover-color);text-decoration:underline}.connection-link:disabled{color:var(--ink-muted);opacity:.65;cursor:not-allowed;text-decoration:none}.connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:5px}.connection-installations{list-style:none;padding:0;margin:18px 0;border-top:1px solid var(--border-soft)}.connection-installations li{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:14px 0;font-size:12px;border-bottom:1px solid var(--border-soft)}.connection-revoke{border-top:1px solid var(--border-soft);padding-top:18px;margin-top:24px}.connection-danger{color:var(--status-error)}.connection-resources{margin-top:36px;padding-top:28px;border-top:1px solid var(--border-color)}.connection-count{color:var(--ink-muted);font-size:12px}.connection-empty{display:flex;align-items:center;gap:18px;padding:20px 0;margin:22px 0}.connection-empty>i{font-size:22px;color:var(--ink-muted)}.connection-empty h3{font-size:14px;font-weight:600;margin:0 0 5px}.connection-empty p{font-size:12px;margin:0}.connection-empty>a{margin-left:auto;flex-shrink:0}.connection-resource{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:20px 0;border-bottom:1px solid var(--border-color)}.connection-resource-name{flex:1;min-width:180px;overflow-wrap:anywhere;font-size:14px}.connection-resource-name small{display:block;color:var(--ink-muted);font-size:11px;margin-top:5px}.connection-resource-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.connection-resource-actions .connection-help{flex-basis:100%}.connections-page .connection-footnote{display:flex;align-items:baseline;gap:10px;margin-top:22px;font-size:12px}@media (max-width:767px){.connections-grid{grid-template-columns:1fr;gap:28px}.connections-grid>section+section{border-top:1px solid var(--border-color);padding-top:28px}.connection-empty{flex-wrap:wrap}.connection-empty>div{flex:1;min-width:180px}.connection-empty>a{margin-left:40px}.connection-resource-actions{flex-basis:100%}}.paper-table-empty-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px}.paper-table-empty-actions .btn>i{font-size:1em;line-height:1;color:inherit;margin-right:0!important}.auth-back{display:inline-flex;align-items:center;gap:10px;font-size:13px;color:var(--ink-muted);margin-bottom:48px}.auth-layout{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:start}.auth-intro,.auth-options{padding-top:28px}.auth-title-mobile{display:none}.auth-intro .paper-page-title{font-size:clamp(48px,5vw,76px);line-height:1.06;margin:18px 0 24px}.auth-intro .paper-page-lede{max-width:330px}.auth-options{display:grid;gap:28px}.auth-options h2{font-family:inherit;font-size:22px;font-weight:600;margin:0 0 10px}.auth-options p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.auth-options .auth-existing{font-size:12px;border-left:2px solid var(--accent);padding-left:14px;margin:0}.auth-permissions{padding:6px 0 12px;list-style:none;font-size:13px;line-height:1.6}.auth-permissions li{display:flex;gap:10px;margin:12px 0}.auth-permissions i{color:var(--status-ready);margin-top:4px}.auth-continue{display:flex!important;align-items:center;justify-content:space-between;min-height:48px;padding:12px 16px!important}.auth-options small{display:block;font-size:12px;text-align:center;color:var(--ink-muted);margin-top:12px}.auth-legacy{border-top:1px solid var(--border-color);padding-top:24px}.auth-legacy h2{font-size:16px;margin:0}.auth-legacy p{font-size:13px}.source-url-label-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;margin-bottom:8px}.source-url-label-row>.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.repo-access{margin:0}.repo-access-details{margin:12px 0 24px}.source-url-label-row .repo-access-switch{padding:2px}.source-url-label-row .repo-access-switch button{padding:6px 10px;font-size:12px;line-height:20px}.repo-access-main{display:flex;align-items:center;gap:10px;padding:0 0 8px;flex-wrap:wrap}.repo-access-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.repo-access-switch{display:inline-flex;gap:3px;padding:3px;border:1px solid var(--border-color);border-radius:7px;flex-wrap:wrap}.repo-access-switch button{border:0;border-radius:4px;background:0 0;color:var(--ink-muted);padding:7px 10px;font:inherit;font-size:12px;cursor:pointer}.repo-access-switch button[aria-pressed=true]{background:var(--accent-soft);color:var(--accent);opacity:1;cursor:default;font-weight:600}.repo-access-switch button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.repo-access-details .btn{font-size:12px;padding:8px 12px}.repo-access-note{display:flex;gap:6px 16px;flex-wrap:wrap;padding:0;color:var(--ink-muted);font-size:11px;line-height:1.6}@media (max-width:767px){.auth-page{max-width:480px}.auth-back,.auth-intro .paper-eyebrow,.auth-title-desktop{display:none}.auth-title-mobile{display:inline}.auth-layout{grid-template-columns:1fr;gap:24px}.auth-intro,.auth-options{padding-top:0}.auth-intro .paper-page-title{font-size:40px;line-height:1.15;margin:6px 0 12px}.auth-intro .paper-page-lede{max-width:none;font-size:14px;margin:0}.auth-options{gap:24px}.auth-options .connection-top{margin-bottom:16px}.auth-options h2{font-size:18px}.auth-options p{font-size:13px;margin-bottom:12px}.auth-permissions{padding:0;margin:14px 0 20px;font-size:12px}.auth-permissions li{margin:8px 0}.auth-continue{font-size:14px}.auth-legacy{padding-top:20px}.auth-legacy h2{font-size:15px}.auth-legacy .connection-link{min-height:44px}.repo-access-controls{width:100%;gap:12px}}.text-muted{color:var(--ink-muted)!important}.anonymize-review-note,.draft-status{font-size:13px;color:var(--ink-muted)}.anonymize-review-note{padding:12px 0;margin:0}.anonymize-preview-status{padding:20px 32px;color:var(--ink-muted)}.anonymize-preview-status p{margin:0 0 12px}@media (max-width:575px){.dashboard-page .paper-page-lede{margin-bottom:8px}.dashboard-page .dashboard-heading-actions{gap:4px}.dashboard-page .dashboard-connections-link{min-height:32px}.dashboard-page .dashboard-filter-row{margin-top:12px}.anonymize-preview-status{padding:16px}}.paper-page .paper-page-title{font-size:32px}.paper-page.admin-page .paper-page-title{font-size:28px}.paper-page .paper-page-lede{font-size:14px;line-height:1.5}.paper-settings{padding-top:32px}.paper-settings-body{grid-template-columns:180px minmax(0,1fr);gap:40px;margin-top:24px;padding-top:24px;border-top:0}.paper-settings-main .paper-settings-section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px;margin-bottom:16px}.anonymize-page .paper-section-eyebrow,.paper-settings .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:-.01em;margin-bottom:12px}.paper-settings .paper-settings-toc-head{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-settings-section .paper-section-copy{margin-top:0}.paper-settings .quota-row{gap:24px}.paper-settings .quota-header{flex-direction:column;align-items:flex-start;gap:4px}.paper-settings .quota-value{white-space:nowrap}.paper-settings .paper-settings-footer{padding:0 0 20px}.paper-settings .form-control{font-size:14px;border-color:var(--border-color);border-radius:var(--radius-control)}.paper-settings .form-check{padding-top:8px;padding-bottom:8px}.anonymize-page .btn-ink,.explorer-page .btn-ink,.paper-page .btn-ink{background:var(--accent);color:#fff;border-color:var(--accent)}.dark-mode .anonymize-page .btn-ink,.dark-mode .explorer-page .btn-ink,.dark-mode .paper-page .btn-ink{color:#1a1815}.anonymize-page .btn-ink:hover,.explorer-page .btn-ink:hover,.paper-page .btn-ink:hover{background:var(--accent);border-color:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .anonymize-page .btn-ink:hover,.dark-mode .explorer-page .btn-ink:hover,.dark-mode .paper-page .btn-ink:hover{color:#1a1815}.anonymize-page .btn-ink:active,.explorer-page .btn-ink:active,.paper-page .btn-ink:active{filter:brightness(.9)}input[type=date],select{color-scheme:light}.dark-mode input[type=date],.dark-mode select{color-scheme:dark}.draft-status{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;padding:10px 0}.draft-discard{padding:0;border:0;color:var(--accent);font:inherit;font-size:13px;text-decoration:underline;background:0 0;cursor:pointer}.conference-feedback{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px;margin-top:16px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);width:100%}.paper-table{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);margin-top:12px}.dashboard-page .paper-table-dashboard{width:100%}.paper-account-email{margin:20px 0}.paper-account-email .form-control{max-width:420px}.paper-settings .paper-account-email .btn[type=submit]{min-height:36px;padding:7px 18px;white-space:nowrap}.paper-table .paper-table-head{font-family:var(--font-sans);text-transform:none;letter-spacing:0;font-size:12px;background:var(--paper-bg-alt);border-radius:var(--radius-surface) var(--radius-surface) 0 0}.paper-table .paper-table-head,.paper-table .paper-table-row{padding-left:16px;padding-right:16px}.dashboard-page{--dashboard-space-xs:4px;--dashboard-space-sm:8px;--dashboard-space-md:12px;--dashboard-space-lg:16px;--dashboard-space-xl:24px;padding-top:var(--dashboard-space-xl)}.project-icon-definitions{position:absolute;width:0;height:0;overflow:hidden}.project-type-svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.project-empty-icon{width:28px;height:28px;color:var(--ink-faint)}.project-type-icon{display:inline-flex;color:var(--ink-muted);flex-shrink:0}.dashboard-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--dashboard-space-lg)}.dashboard-heading .paper-page-title{font-size:28px;margin-bottom:var(--dashboard-space-xs)}.dashboard-heading .paper-page-lede{display:none}.dashboard-heading .btn{min-height:40px;display:inline-flex;gap:var(--dashboard-space-sm);align-items:center}.dashboard-new-mobile{display:none}.dashboard-quota{position:relative;margin:0;padding:0;border:0;background:0 0}.dashboard-quota>summary{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:5px 10px;border:1px solid var(--border-color);border-radius:6px;background:var(--paper-card);color:var(--color);font-family:var(--font-sans);font-size:12px;cursor:pointer;list-style:none;white-space:nowrap}.dashboard-quota>summary::-webkit-details-marker{display:none}.dashboard-quota>summary:hover,.dashboard-quota[open]>summary{background:var(--paper-bg-alt);border-color:var(--ink-faint)}.quota-summary-label{font-weight:600}.quota-summary-value{color:var(--ink-muted);font-variant-numeric:tabular-nums}.quota-summary-ring{width:18px;height:18px;flex-shrink:0;fill:none;stroke-width:2.5}.quota-ring-track{stroke:var(--border-color)}.quota-ring-fill{stroke:var(--accent);transform:rotate(-90deg);transform-origin:50% 50%}.quota-summary-ring.quota-warn .quota-ring-fill{stroke:var(--status-progress)}.quota-summary-ring.quota-danger .quota-ring-fill{stroke:var(--status-error)}.quota-ring-unlimited{stroke:var(--accent);stroke-width:1.7}.quota-summary-chevron{width:14px;height:14px;margin-left:2px;color:var(--ink-muted);transition:transform .15s ease}.dashboard-quota[open] .quota-summary-chevron{transform:rotate(180deg)}.dashboard-quota .quota-panel{position:absolute;z-index:25;top:calc(100% + 8px);left:0;width:344px;max-width:calc(100vw - 36px);padding:16px;border:1px solid var(--border-color);border-radius:12px;background:var(--paper-card);box-shadow:0 12px 36px rgba(26,24,21,.16)}.quota-panel-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.quota-panel-heading h2{font:600 15px var(--font-sans);margin:0}.quota-panel-heading .project-close{margin:-8px -8px -8px 0}.paper-page .quota-usage{display:grid;grid-template-columns:1fr;gap:16px;margin:0;padding:0}.quota-usage .quota-item+.quota-item{padding-top:16px;border-top:1px solid var(--border-soft,var(--border-color))}.quota-usage .quota-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.quota-usage .quota-label{display:inline-flex;align-items:center;gap:8px;font:500 12px var(--font-sans);letter-spacing:0;text-transform:none;color:var(--ink-muted)}.quota-usage .quota-label .project-type-svg{width:16px;height:16px}.quota-usage .quota-value{display:flex;align-items:baseline;gap:4px;font:12px var(--font-sans);font-variant-numeric:tabular-nums;color:var(--ink-muted);margin-bottom:8px}.quota-usage .quota-value strong{font-size:20px;line-height:1.2;font-weight:600;color:var(--color)}.quota-percent,.quota-usage .quota-unlimited-tag{margin-left:auto;padding:2px 6px;border-radius:4px;background:var(--paper-bg-alt);font:11px var(--font-sans);color:var(--ink-muted);white-space:nowrap}.quota-warn>.quota-header .quota-percent{color:var(--status-progress)}.quota-danger>.quota-header .quota-percent{color:var(--status-error)}.quota-usage .quota-track{height:5px;border:0;background:var(--paper-bg-alt)}.quota-usage .quota-track .quota-fill{min-width:0;background:var(--accent)}.quota-remaining{margin:6px 0 0;color:var(--ink-muted);font-size:11px}.quota-remaining.quota-limit{color:var(--status-error)}.quota-loading{font-size:12px;color:var(--ink-muted);margin:12px 0 0}.dashboard-page .dashboard-filter-row{display:flex;align-items:center;gap:var(--dashboard-space-md);padding:0;margin:var(--dashboard-space-lg) 0 0;border:0;background:0 0}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 240px;min-width:0}.dashboard-page .dashboard-filter-row .form-control{height:40px;padding:8px 12px;font-size:13px;background:var(--paper-card)}.dashboard-page .dashboard-filter-controls{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--dashboard-space-sm)}.dashboard-extra-filters{display:flex;gap:var(--dashboard-space-sm)}.dashboard-filters-toggle{display:none}.dashboard-page .dashboard-filter-row .btn-group .btn{border:0;background:0 0;border-radius:6px;height:36px;padding:6px 10px}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--accent-soft);color:var(--accent)}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:active,.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.dashboard-page .dashboard-filter-row .dropdown-toggle{height:36px;padding:6px 10px}.dashboard-type-filter .project-type-svg{display:none}.sort-direction{width:14px;height:14px}.sort-direction.ascending{transform:rotate(180deg)}.dashboard-page .dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--dashboard-space-sm) var(--dashboard-space-md);margin:var(--dashboard-space-md) 0 0;padding:0}.dashboard-view-tabs{display:flex;align-items:center;gap:var(--dashboard-space-lg)}.dashboard-view-short{display:none}.dashboard-view-tabs button{min-height:36px;border:0;border-bottom:2px solid transparent;border-radius:0;background:0 0;font:inherit;font-size:13px;color:var(--ink-muted);padding:4px 0}.dashboard-view-tabs button[aria-pressed=true]{color:var(--color);border-bottom-color:var(--color);font-weight:600}.attention-count{padding:1px 5px;margin-left:4px;border-radius:4px;background:var(--paper-bg-alt);font-size:11px;font-variant-numeric:tabular-nums}.attention-count.has-attention{color:var(--status-error)}.dashboard-count{margin-left:auto;font-size:12px;color:var(--ink-muted)}.dashboard-active-filters{display:flex;align-items:center;flex-wrap:wrap;gap:var(--dashboard-space-sm);width:100%}.dashboard-page .filter-chip{display:inline-flex;font-family:var(--font-sans);font-size:11px;text-transform:none;letter-spacing:0;border-radius:6px}.dashboard-page .filter-chip .project-type-svg{width:12px;height:12px;margin-left:4px}.dashboard-page .filter-chip-close{min-width:24px;min-height:24px;display:inline-flex;align-items:center;justify-content:center;margin:-2px -4px -2px 2px}.dashboard-page .btn-link-inline{color:var(--ink-muted);font-size:12px}.dashboard-page .paper-table-dashboard{margin-top:var(--dashboard-space-md);border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table-dashboard .paper-table-head,.dashboard-page .paper-table-dashboard .paper-table-row{grid-template-columns:minmax(280px,3fr) 180px 72px 148px 64px;gap:var(--dashboard-space-lg);padding:8px 12px}.dashboard-page .paper-table-dashboard .paper-table-head{border-radius:0}.dashboard-page .paper-table .cell-anon{gap:var(--dashboard-space-sm)}.dashboard-page .paper-table .anon-text{flex:1}.dashboard-page .paper-table .repo-name{font-family:var(--font-sans);font-size:14px;font-weight:600}.dashboard-page .paper-table .anon-sub{display:flex;align-items:center;gap:var(--dashboard-space-sm);min-width:0}.anonymous-id{font-size:12px;font-family:var(--font-mono);color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-page .paper-table .type-badge{font-family:var(--font-sans);letter-spacing:0;font-size:11px;text-transform:none;border-radius:6px}.dashboard-page .paper-table .status-sub{font-size:12px}.dashboard-page .paper-table .cell-conf{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.dashboard-page .conf-tag .project-type-svg{width:14px;height:14px}.dashboard-row-meta{display:contents}.dashboard-page .cell-actions{gap:0;align-items:center}.copy-link-inline,.dashboard-page .btn-icon-dots,.project-close{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:6px;background:0 0;color:var(--ink-muted);padding:0;width:32px;height:32px;min-width:32px;cursor:pointer}.copy-link-inline:focus-visible,.copy-link-inline:hover,.dashboard-page .btn-icon-dots:hover,.project-close:hover{background:var(--accent-soft);color:var(--accent)}.copy-link-inline:disabled{opacity:.5;cursor:wait}.mobile-meta-icon{display:none}.project-attention-action{display:inline-block;color:var(--accent);border:0;background:0 0;padding:0;font:inherit;font-size:12px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}.project-attention-action{text-align:left}.dashboard-page .cell-status .project-attention-action{flex-basis:100%}.project-details-row{width:100%;border-bottom:1px solid var(--border-color)}.project-details{padding:var(--dashboard-space-xl);background:var(--paper-bg-alt)}.project-details-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--dashboard-space-sm)}.project-details-heading h2{font:600 16px var(--font-sans);margin:0}.project-details-list{display:grid;grid-template-columns:1fr 1fr;gap:var(--dashboard-space-md) var(--dashboard-space-xl);margin:12px 0}.project-details-list dt{font-size:12px;color:var(--ink-muted);font-weight:500;margin-bottom:4px}.project-details-list dd{margin:0;font-size:13px;overflow-wrap:anywhere}.project-details-list code{color:var(--color);font-size:12px}.project-name-form{margin-top:var(--dashboard-space-lg);padding-top:var(--dashboard-space-lg);border-top:1px solid var(--border-color)}.project-name-form label{display:block;font-size:13px;font-weight:500;margin-bottom:4px}.project-name-form p,.project-progress-help{font-size:12px;color:var(--ink-muted);margin-bottom:8px}.project-name-controls{display:flex;gap:var(--dashboard-space-sm);max-width:560px}.project-name-controls .form-control{min-width:0;font-size:14px}.project-name-controls .btn{flex-shrink:0;min-height:40px}.project-name-form .project-name-error{color:var(--status-error)}.project-details-button{min-height:44px;padding:0 8px;border:0;border-radius:6px;background:0 0;font:inherit;font-size:12px;color:var(--ink-muted);cursor:pointer}.anonymize-page .anonymize-topbar-title{font-family:var(--font-sans);font-size:28px;font-weight:600}.anonymize-topbar{padding:16px 24px}.anonymize-form-col{background:var(--paper-bg-alt)}.anonymize-form-col .paper-settings-main{padding:20px 24px}.anonymize-form-col .paper-settings-section{padding:18px}.anonymize-form-col .paper-settings-section:first-child{padding-top:18px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt);padding:12px 0}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-sans);font-size:14px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0}.anonymize-preview-col{background:var(--canvas-bg-color);padding:24px}.anonymize-preview-head{flex-wrap:wrap;gap:6px 12px;margin-bottom:16px}.anonymize-preview-body{padding:24px}.anonymize-mobile-tabs,.anonymize-preview-empty,.mobile-preview-jump{display:none}.anonymize-page .repo-access-note{font-size:12px}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:18px}.paper-settings-toc{padding:0}.paper-settings-toc-head{display:none}.paper-table .paper-table-row{padding-left:14px;padding-right:14px}}@media (max-width:767px){.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:24px}.paper-settings{padding:20px 16px 40px}.paper-settings-main .paper-settings-section{padding:16px}.anonymize-topbar{padding:12px 16px}.anonymize-topbar .paper-crumbs{display:none}.anonymize-mobile-tabs{display:flex;gap:4px;padding:8px 16px;border-bottom:1px solid var(--border-color);background:var(--paper-card)}.anonymize-mobile-tabs button{flex:1;font:inherit;font-size:13px;padding:10px;border:0;border-radius:6px;background:0 0;color:var(--ink-muted)}.anonymize-mobile-tabs button[aria-selected=true]{background:var(--accent-soft);color:var(--accent);font-weight:600}.anonymize-page:not(.mobile-preview-active) .anonymize-preview-col{display:none}.mobile-preview-active .anonymize-form-col{display:none}.mobile-preview-active .anonymize-preview-empty{display:block;padding:24px 16px;color:var(--ink-muted)}.anonymize-form-col .paper-settings-main{padding:16px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt)}.mobile-preview-jump{display:block;width:100%;min-height:44px}.anonymize-preview-col{padding:16px}.anonymize-preview-body{padding:16px}}@media (max-width:575px){.paper-settings .quota-header{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:4px 8px}}@media (max-width:1100px) and (min-width:901px){.dashboard-page .dashboard-filter-row{flex-wrap:wrap}.dashboard-page .dashboard-filter-row .search-wrap{flex-basis:100%}.dashboard-page .dashboard-filter-controls{width:100%;justify-content:space-between}}@media (max-width:900px){.dashboard-page .paper-table.paper-table-dashboard .paper-table-row{gap:4px 8px;padding:8px 12px}.dashboard-page .paper-table .cell-anon{flex:1 1 calc(100% - 96px);min-width:0}.dashboard-page .paper-table .cell-actions{flex:0 0 88px}.dashboard-row-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;order:3;width:100%}.dashboard-page .dashboard-row-meta .cell-status{flex:1 1 80px;flex-wrap:wrap;gap:2px 8px}.dashboard-page .dashboard-row-meta .cell-expires,.dashboard-page .dashboard-row-meta .cell-views{flex-shrink:0;font-size:12px}.dashboard-page .cell-expires::before,.dashboard-page .cell-views::before{content:none}.dashboard-page .mobile-meta-icon{display:inline-block;width:14px;height:14px}.dashboard-page .dashboard-row-meta .status-sub-date{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-page .dashboard-row-meta .status-sub-error,.dashboard-page .dashboard-row-meta .status-sub-warn{flex-basis:100%;white-space:normal;overflow-wrap:anywhere}.dashboard-page .dashboard-row-meta .status-sub::before{content:none}.dashboard-page .project-attention-action{min-height:44px;display:inline-flex;align-items:center}.dashboard-page .paper-table .anon-sub .commit-hash,.dashboard-page .paper-table .anon-sub .conf-tag{display:none}}@media (max-width:767px){.container.dashboard-page{padding-top:12px}.dashboard-heading .paper-page-title{font-size:24px}.dashboard-heading-actions .btn-ink{min-height:44px}.dashboard-new-label{display:none}.dashboard-new-mobile{display:inline}.dashboard-quota>summary{min-height:44px;gap:6px;padding:10px;font-size:12px;line-height:20px}.dashboard-quota .quota-panel{max-height:calc(100dvh - 184px);overflow-y:auto;overscroll-behavior:contain}.dashboard-page .dashboard-filter-row{flex-wrap:wrap;gap:8px;margin-top:12px}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 0}.dashboard-page .dashboard-filter-row .form-control{height:44px}.dashboard-page .dashboard-filters-toggle{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:8px;min-height:44px;background:0 0;border:0}.dashboard-page .dashboard-filter-controls{display:none;width:100%}.dashboard-page .dashboard-filter-controls.expanded{display:flex;flex-wrap:wrap;gap:8px}.dashboard-page .dashboard-filter-controls .btn-group{width:100%;display:flex}.dashboard-page .dashboard-filter-controls .btn-group .btn{flex:1;min-height:44px}.dashboard-extra-filters{display:flex;width:100%}.dashboard-page .dashboard-extra-filters .dropdown{flex:1;min-width:0}.dashboard-page .dashboard-extra-filters .dropdown-toggle{width:100%;height:44px}.dashboard-type-filter .type-filter-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-type-filter .project-type-svg{display:inline-block}.dashboard-page .dashboard-meta{margin-top:8px;gap:4px 8px}.dashboard-view-tabs{gap:16px}.dashboard-view-tabs button{min-width:44px;min-height:44px;font-size:12px}.dashboard-count{font-size:11px}.dashboard-count{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.dashboard-view-long{display:none}.dashboard-view-short{display:inline}.dashboard-active-filters{display:contents}.dashboard-page .filter-chip{font-size:11px;padding:0 8px;min-height:44px;gap:4px}.dashboard-page .filter-chip-close{min-width:44px;min-height:44px;margin:0}.dashboard-page .btn-link-inline{min-height:44px;font-size:12px}.dashboard-page .paper-table-dashboard{width:calc(100% + 36px);margin:8px -18px 0;border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table .repo-name{font-size:13px}.project-details{padding:16px 12px}.project-details-list{grid-template-columns:1fr;gap:12px}.project-name-controls{flex-wrap:wrap}.project-name-controls .form-control{flex-basis:100%}.project-name-controls .btn{min-height:44px}}@media (max-width:360px){.dashboard-attention-prefix{display:none}.dashboard-attention-prefix+span{text-transform:capitalize}}.ui-icon-definitions{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}.ui-icon{display:inline-block;width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;vertical-align:-3px}.ui-icon.sort-direction{width:14px;height:14px}.pr-title-row{display:flex;align-items:flex-start;gap:16px}.pr-title-row .pr-title{flex:1;min-width:0}.pr-title-row>.btn{flex-shrink:0}.ui-icon.record-type-icon{color:var(--ink-muted)}.btn .ui-icon,.dropdown-item .ui-icon{width:16px;height:16px}.btn-icon-dots .ui-icon{width:18px;height:18px}.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:28px}.paper-faq,.paper-page{padding-top:24px}.paper-page .paper-page-lede{margin-bottom:16px;overflow-wrap:anywhere}.paper-page-title{overflow-wrap:anywhere}.anonymize-page .form-control,.paper-page .form-control{min-height:40px;font-family:var(--font-sans);font-size:14px;border-radius:var(--radius-control)}.anonymize-page textarea.form-control,.paper-page textarea.form-control{height:auto}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);border-radius:var(--radius-button);gap:6px}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm,.status-bar-actions .btn{min-height:var(--button-compact-height);padding:5px 10px;font-size:13px;border-radius:6px}.anonymize-page .btn-ink,.paper-page .btn-ink{min-height:40px;padding:9px 15px}.btn-hero>i,.btn>.project-type-svg,.btn>.ui-icon,.btn>i{width:16px;height:16px;margin:0!important;flex-shrink:0}.btn.dropdown-toggle::after{margin-left:0}.btn.disabled,.btn:disabled{cursor:not-allowed}.btn.disabled:hover,.btn:disabled:hover{filter:none}.paper-page .btn.btn-link{background:0 0;border-color:transparent}.auth-continue.btn{min-height:44px;padding:11px 16px!important}.anonymize-page .btn.btn-icon,.paper-page .btn.btn-icon{width:32px;height:32px;min-width:32px;min-height:32px;padding:0}.paper-page .btn.btn-icon-dots{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;min-width:32px;min-height:32px;padding:0;border:0;background:0 0;color:var(--ink-muted)}.paper-page .btn-icon-dots:hover{background:var(--accent-soft);color:var(--accent)}.paper-page .btn-group .btn-primary:active,.paper-page .btn-group .btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.paper-page .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0;margin-bottom:12px}.paper-page .paper-field-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0}.paper-tabs .paper-tab{min-height:44px}.paper-pill,.status-pill{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-meta-rule{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;gap:12px 24px}.paper-meta-rule b:not(.commit-hash){font-family:var(--font-sans);font-weight:500}.connections-grid{gap:16px}.connections-grid>section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px}.connections-heading{margin-bottom:24px}.claim-page .claim-form,.status-page>.paper-settings-section{padding:20px;margin-top:24px;border:1px solid var(--border-color);border-radius:var(--radius-surface);background:var(--paper-card)}.claim-page .claim-form{max-width:640px}.status-page .anonymize-submit-bar{background:0 0;gap:8px;flex-wrap:wrap}.anonymize-landing{padding-top:32px}.paper-settings .quota-usage{grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}.paper-settings .quota-usage .quota-item+.quota-item{padding-top:0;border-top:0;padding-left:16px;border-left:1px solid var(--border-color)}.paper-settings .quota-usage .quota-header{flex-direction:row;align-items:center;flex-wrap:wrap}.paper-settings .quota-usage .quota-value{white-space:normal;flex-wrap:wrap}.paper-faq-hero{padding-bottom:24px;margin-bottom:24px}.paper-faq-eyebrow,.paper-faq-toc-head{font-family:var(--font-sans);font-size:12px;text-transform:none;letter-spacing:0;margin-bottom:8px}.paper-faq-title{font:600 28px/1.2 var(--font-sans);letter-spacing:-.025em;max-width:720px;margin-bottom:12px}.paper-faq-title em{font-style:normal}.paper-faq-lede{font-size:14px}.paper-faq-body{grid-template-columns:180px minmax(0,1fr);gap:40px}.faq-section h4.faq-cat{font:600 18px/1.4 var(--font-sans);padding-bottom:12px}.faq-section h4.faq-cat .ui-icon{display:none}.faq-section .panel-group{margin-bottom:32px}.faq-section .panel-default .panel-title a{font:500 15px/1.5 var(--font-sans);padding:16px 0 16px 28px;min-height:44px}.faq-section .panel-default .panel-title a:after{top:16px}.paper-empty-title{font:600 32px/1.2 var(--font-sans);letter-spacing:-.025em}.paper-empty-title em{font-style:normal}.btn-hero{justify-content:center;gap:8px;min-height:48px;padding:13px 20px;font-size:15px;line-height:20px;background:var(--accent);border-color:var(--accent);color:#fff;border-radius:var(--radius-button)}.dark-mode .btn-hero{color:#1a1815}.btn-hero:hover{background:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .btn-hero:hover{color:#1a1815}.paper-table:not(.paper-table-dashboard){border-left:0;border-right:0;border-radius:0}.paper-table:not(.paper-table-dashboard) .paper-table-head{border-radius:0}.paper-table .cell-anon{gap:8px}.paper-table .cell-anon .anon-text{flex:1}.paper-table-conferences .cell-anon .repo-name{font-family:var(--font-sans);font-weight:600}.paper-table .anon-sub>a,.paper-table .anon-sub>span{min-width:0;overflow:hidden;text-overflow:ellipsis}.paper-table .anon-sub .ui-icon{width:14px;height:14px}.paper-page .filter-chip{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-page .filter-chip-close .ui-icon{width:12px;height:12px}.admin-nav{gap:4px;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 8px;background:0 0}.admin-nav a{font-family:var(--font-sans);font-size:13px;letter-spacing:0;text-transform:none;border-radius:6px;min-height:40px;padding:8px 12px}.admin-nav a.active{background:var(--accent-soft);color:var(--accent)}.admin-nav .ui-icon{width:16px;height:16px}.admin-filter-toolbar{background:0 0;border:0;padding:0}.admin-filter-inline>label,.admin-filter-inline>span{font-family:var(--font-sans);text-transform:none;letter-spacing:0}.admin-summary .summary-total{font-family:var(--font-sans);font-size:18px;font-weight:600}.admin-summary .summary-pill{font:500 13px/20px var(--font-sans);min-height:32px;padding:5px 10px;border-radius:6px}.admin-summary .summary-pill.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.admin-summary .summary-pill .count{font-family:var(--font-sans)}.admin-active-chip{font-family:var(--font-sans);font-size:12px}.admin-active-chip button .ui-icon{width:12px;height:12px}.user-detail-card .user-header h2{font:600 20px/1.4 var(--font-sans)}.errors-page .errors-toolbar .select-wrap label,.errors-page .volume-head,.overview-page .ov-panel-meta,.paper-detail-grid .detail-label,.paper-progress .paper-progress-label,.status-page .paper-error-eyebrow,.user-detail-grid .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-chart-title,.overview-page .ov-panel-title,.paper-error-title{font:600 16px/1.4 var(--font-sans)}.paper-error-head>.ui-icon,.paper-ratelimit-head>.ui-icon{margin-top:3px;color:var(--status-error)}.paper-ratelimit-head>.ui-icon{color:var(--status-progress)}.errors-page .seg-tabs{border-radius:var(--radius-control)}.errors-page .seg-tabs button{min-height:36px;padding:7px 12px;font:500 14px/20px var(--font-sans)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.errors-page .errors-list,.errors-page .kpi-card:hover,.errors-page .volume-chart,.overview-page .ov-chart-card,.overview-page .ov-panel-card{box-shadow:none}.errors-page .kpi-value,.overview-page .ov-daily-value,.overview-page .ov-kpi-value,.q-card-count,.user-hero-name{font-family:var(--font-sans);font-size:28px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.errors-page .kpi-label,.overview-page .ov-daily-label,.overview-page .ov-kpi-label,.q-card-name,.q-section-label,.user-hero-details .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-daily-card{background:var(--paper-card);box-shadow:none;border-radius:var(--radius-surface)}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--accent)}.errors-page .kpi-card,.overview-page .ov-kpi-card{box-shadow:none;border-radius:var(--radius-surface)}.q-card{border-radius:var(--radius-surface)}.q-card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.q-range-btns{border-radius:var(--radius-control)}.q-job-detail-actions .btn,.q-range-btns .btn{font-family:var(--font-sans);font-size:13px}.q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}@media (max-width:900px){.paper-settings .quota-usage{grid-template-columns:1fr;gap:16px}.paper-settings .quota-usage .quota-item+.quota-item{padding-left:0;border-left:0;border-top:1px solid var(--border-color);padding-top:16px}.paper-table:not(.paper-table-dashboard) .paper-table-row{gap:4px 8px!important;padding:8px 12px}.paper-table:not(.paper-table-dashboard) .cell-anon{flex:1 1 calc(100% - 52px);order:1}.paper-table:not(.paper-table-dashboard) .cell-actions{order:2;flex:0 0 44px}.paper-table .admin-users-row>[role=cell]:first-child,.paper-table.paper-table-repos.has-bulk .paper-table-row>[role=cell]:first-child{flex:0 0 24px;order:0}.paper-table .admin-users-row .cell-anon,.paper-table.paper-table-repos.has-bulk .cell-anon{flex-basis:calc(100% - 84px)}.paper-table:not(.paper-table-dashboard) .cell-anon .anon-sub{font-size:12px;gap:6px}.paper-table:not(.paper-table-dashboard) .cell-status .status-sub{font-size:12px}.paper-table .cell-expires::before,.paper-table .cell-views::before{content:none}.paper-table .cell-expires .mobile-meta-icon,.paper-table .cell-views .mobile-meta-icon{display:inline-block;width:14px;height:14px}.paper-faq-body{grid-template-columns:1fr;gap:24px}}@media (max-width:767px){.paper-faq,.paper-page{padding-top:20px}.paper-settings .paper-account-email .btn[type=submit]{min-height:40px;padding:9px 18px}.anonymize-page .paper-page-title,.paper-faq-title,.paper-page .paper-page-title,.paper-page.admin-page .paper-page-title{font-size:24px}.anonymize-page .form-control,.paper-page .form-control{min-height:44px}.anonymize-page .btn,.connection-link,.draft-discard,.paper-faq-toc a,.paper-page .btn,.paper-settings-toc nav a{min-height:44px}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:44px;padding:11px 14px;font-size:14px;line-height:20px;white-space:normal}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm{min-height:44px;padding:11px 12px;font-size:14px}.anonymize-page .btn.btn-icon,.copy-link-inline,.paper-page .btn.btn-icon,.paper-page .btn.btn-icon-dots,.project-close{width:44px;height:44px;min-width:44px;min-height:44px;padding:0}.dashboard-page .dashboard-filter-row .btn-group .btn,.dashboard-page .dashboard-filter-row .dropdown-toggle{height:auto;min-height:44px;font-size:14px;padding:11px 10px}.dashboard-heading-actions .btn-ink{padding:11px 16px}.dashboard-page .dashboard-filters-toggle{padding:11px 10px}.errors-page .btn-icon,.pr-title-row .btn,.status-bar-actions .btn{min-width:44px;min-height:44px;padding:0}.status-bar-actions .btn{width:44px;height:44px}.errors-page .seg-tabs button,.paper-tab{min-height:44px}.errors-page .seg-tabs button{padding:11px 12px}.status-bar-actions{flex-wrap:wrap;max-width:100%}.leftCol-close,.tree-search-clear{min-width:44px;min-height:44px}.anonymize-landing{padding:20px 18px}.anonymize-landing .repo-access-switch button,.source-url-label-row .repo-access-switch button{min-height:44px;padding:11px 10px;font-size:13px}.paper-settings-body{margin-top:16px;padding-top:0;gap:16px}.paper-settings-toc nav{gap:0 12px}.paper-settings-toc nav a{display:inline-flex;align-items:center}.paper-faq{padding-left:18px;padding-right:18px}.paper-faq-toc nav{display:flex;flex-direction:row;flex-wrap:wrap;gap:0 16px}.paper-faq-toc a{display:inline-flex;align-items:center;padding:8px 0;border-left:0;border-bottom:2px solid transparent;margin-left:0}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{border-bottom-color:var(--accent);color:var(--accent)}.claim-page .claim-form,.status-page>.paper-settings-section{padding:16px;margin-top:16px}.admin-nav{flex-direction:row;flex-wrap:nowrap;overflow-x:auto;gap:4px;max-width:100%;margin:8px 0 16px}.admin-nav a{flex-shrink:0;min-height:44px}.admin-summary .summary-pill{min-height:44px;padding:11px 12px;font-size:14px}.admin-active-chip button{min-width:44px;min-height:44px}.admin-filter-row{gap:8px}.admin-filter-row .admin-filter-inline{gap:8px;flex-wrap:wrap}.errors-page .kpi-grid{grid-template-columns:1fr 1fr;gap:12px}.q-cards{flex-direction:row}.q-card{min-width:130px}.q-header-actions{flex-wrap:wrap;gap:8px}}.paper-page.container:not(.auth-page){max-width:1180px}.paper-page>.row{margin-left:0;margin-right:0}.paper-page>.row>.w-100,.paper-page>.row>[class*=col]{padding-left:0;padding-right:0}.anonymize-landing{align-items:flex-start}.status-page .paper-support-grid{margin-bottom:0}.explorer-content .ace_editor{font-family:var(--font-mono);line-height:1.6}.dark-mode .explorer-content .ace-nord-dark,.dark-mode .explorer-content .ace-nord-dark .ace_gutter{background:var(--main-bg-color)}.explorer-content .file-content.markdown-body{max-width:960px;padding:32px 40px 96px}.leftCol-project-header .project-name{white-space:normal;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.file-error{font-size:inherit;font-weight:inherit;text-align:left}.file-error-card{width:100%;max-width:520px;margin-top:0}.file-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.file-error-actions{display:flex;gap:8px;margin-top:16px}.file-error .paper-empty-title{font-size:20px;text-align:center}@media (min-width:992px){.leftCol-foot{padding-bottom:72px}}.explorer-content .ace-chrome,.explorer-content .ace-chrome .ace_gutter{background:var(--main-bg-color)}@media (max-width:991px){.explorer-content .file-content.markdown-body{padding:20px 16px 96px}.anonymize-landing{padding:20px 18px}.anonymize-landing-inner{padding:0}.paper-faq-toc nav,.paper-settings-toc nav{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.paper-faq-toc nav a,.paper-settings-toc nav a{flex-shrink:0;white-space:nowrap}.paper-faq-body,.paper-settings-body{grid-template-columns:minmax(0,1fr)}.paper-faq-toc,.paper-settings-toc{position:static}.paper-faq-toc nav,.paper-settings-toc nav{display:flex;flex-direction:row;gap:0 16px}.paper-faq-toc nav a,.paper-settings-toc nav a{display:inline-flex;align-items:center;padding:8px 0;margin-left:0;border-left:0;border-bottom:2px solid transparent}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover,.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--accent)}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{justify-content:flex-start;gap:6px}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle::after{margin-left:auto}}@media (max-width:480px){.paper-page .paper-page-lede{display:block;-webkit-line-clamp:unset;overflow:visible}}.navbar .btn-signin,.navbar .btn-signin:hover{background:var(--accent);border-color:var(--accent);color:#fff!important}.dark-mode .navbar .btn-signin,.dark-mode .navbar .btn-signin:hover{color:#1a1815!important}.navbar .btn-signin:hover{filter:brightness(.94)}.paper-progress .paper-progress-bar,.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--accent)}.paper-progress .paper-progress-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-error-eyebrow,.paper-support-card .paper-support-eyebrow{font-family:var(--font-sans);font-size:12px;font-weight:500;letter-spacing:0;text-transform:none}.leftCol-foot .last-update{font-family:var(--font-sans);font-size:11px;letter-spacing:0}.paper-proof-venues span{font-family:var(--font-sans);font-size:18px;font-weight:600;letter-spacing:.02em;color:var(--ink-soft)}.markdown-body mark.redaction{background:var(--accent-soft);color:var(--accent);border-radius:3px;padding:0 2px}.ace_marker-layer .ace_redaction{position:absolute;background:var(--accent-soft);border-radius:3px}.leftCol-project-header{flex-wrap:wrap;row-gap:2px}.project-expiry{flex:1 0 100%;display:flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.project-expiry .ui-icon{width:12px;height:12px}.status-bar-actions .btn-icon-only{width:32px;padding:0;justify-content:center}.share-link-row{display:flex;gap:8px;margin-top:4px}.share-link-input{flex:1;min-width:0;font-family:var(--font-mono);font-size:14px;background:var(--paper-bg-alt)}.share-link-row .btn{flex-shrink:0;display:inline-flex;align-items:center;gap:6px;min-width:112px;justify-content:center}.share-link-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.share-link-actions .btn{display:inline-flex;align-items:center;gap:6px}.status-page .paper-support-grid{gap:0 32px}.status-page .paper-support-card{padding:16px 0 0;border:0;border-top:1px solid var(--border-color);border-radius:0;background:0 0}.status-page .paper-support-card:hover{border-color:var(--color)}@media (min-width:992px){.paper-table .cell-expires{white-space:nowrap}}.paper-settings .paper-settings-main .paper-settings-section{background:0 0;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 28px;margin-bottom:28px}.paper-settings .paper-settings-main .paper-settings-section:last-of-type{border-bottom:0}@media (max-width:991px){.paper-settings .paper-settings-main .paper-settings-section{padding:0 0 20px;margin-bottom:20px}.share-link-row{flex-direction:column}.share-link-actions{flex-direction:column}.share-link-actions .btn{justify-content:center}.status-page .paper-support-grid{row-gap:20px}}.paper-page .q-range-btns{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card);overflow:visible}.paper-page .q-range-btns .btn,.paper-page .q-range-btns .btn+.btn{min-height:0;height:28px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.paper-page .q-range-btns .btn:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}.q-header-actions>.btn{height:34px;min-height:34px}.paper-page .btn.btn-danger-soft{background:0 0;border-color:var(--status-error);color:var(--status-error)}.paper-page .btn.btn-danger-soft:hover{background:var(--status-error-soft-hover);border-color:var(--status-error);color:var(--status-error)}.q-auto-refresh,.q-section-label,.q-state-chip{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.q-state-chip{font-size:12px;text-transform:capitalize}.overview-page .ov-ebar-fill{display:block}.paper-table .paper-table-row.repo-error{border-left:0;box-shadow:inset 2px 0 0 var(--status-error);padding-left:16px}.admin-page .q-table th,.admin-page .type-badge,.admin-page .user-detail-section h2,.admin-page section>h2,.admin-page th,.admin-page>h2,.errors-page .col-count,.errors-page .col-mod,.errors-page .col-msg,.errors-page .col-sev,.errors-page .col-status,.errors-page .col-when,.overview-page .ov-chart-legend,.overview-page .ov-ebar-label,.overview-page .ov-route-n,.overview-page .ov-route-name,.q-card-sub,.q-delay-hint,.q-legend-completed,.q-legend-exec,.q-legend-failed,.q-section-right,.q-stat-label,.user-detail-grid .detail-label{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.admin-page th,.errors-page [class^=col-]{font-size:12px;font-weight:500;color:var(--ink-muted)}.q-card-sub,.q-stat-label,.user-detail-grid .detail-label{font-size:12px}.q-stat-value{font-family:var(--font-sans);font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}.q-state-badge{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:capitalize}.admin-page .type-badge{font-size:12px;text-transform:none}.errors-page .col-sev span,.errors-page .sev-label{text-transform:capitalize}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--color)}.dark-mode .overview-page .ov-spark-fill-alt,.dark-mode .overview-page .ov-spark-fill-new-user,.dark-mode .overview-page .ov-spark-fill-user,.overview-page .ov-spark-fill-alt,.overview-page .ov-spark-fill-new-user,.overview-page .ov-spark-fill-user{background:var(--accent)}.dark-mode .overview-page .ov-dot-new-user-fill,.dark-mode .overview-page .ov-dot-ok-fill,.dark-mode .overview-page .ov-dot-user-fill,.overview-page .ov-dot-new-user-fill,.overview-page .ov-dot-ok-fill,.overview-page .ov-dot-user-fill{background:var(--accent)}.errors-page .seg-tabs{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card)}.errors-page .seg-tabs button,.errors-page .seg-tabs button+button{min-height:0;height:30px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.errors-page .seg-tabs button:hover{background:var(--hover-bg-color);color:var(--color)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.user-detail-card .user-header .status-dot-wrap{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:400;color:var(--ink-soft)}.user-detail-card .user-actions{display:flex;flex-wrap:wrap;gap:8px}.admin-page .paper-table .cell-anon .anon-sub{flex-wrap:wrap;row-gap:2px}.admin-page .paper-table .anon-sub>a,.admin-page .paper-table .anon-sub>span{flex:0 1 auto;max-width:100%;white-space:nowrap}.admin-page .paper-table .cell-views .mobile-meta-icon{margin-right:4px}.q-jobs{overflow-x:auto}.q-job-detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.admin-section-header h2{font-family:var(--font-sans);font-size:16px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--color)}.errors-page .sev-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0}.email-prompt{width:min(560px,calc(100vw - 32px));padding:28px;border:1px solid var(--paper-border,#e5e1d9);border-radius:12px;background:var(--paper-bg,#faf9f6);color:inherit;box-shadow:0 16px 64px #0003}.email-prompt::backdrop{background:#0006}.email-prompt h2{margin:0 0 12px;font-size:24px}.email-prompt p{margin-bottom:20px}.email-prompt-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;margin-top:24px}body.dark-mode .email-prompt{background:#242320;color:#faf9f6}.file-error .viewer-error{width:100%;max-width:65ch;padding:2rem 1rem;overflow-wrap:anywhere;font-size:1rem;font-weight:400;text-align:left}.viewer-error .paper-empty-title{margin-bottom:1rem}.viewer-error p{line-height:1.6}.viewer-error .paper-error-actions{display:flex;flex-wrap:wrap;gap:.75rem}.markdown-body .markdown-alert{margin:1rem 0;padding:.5rem 1rem;border-left:4px solid var(--alert-color,#0969da)}.markdown-body .markdown-alert-note{--alert-color:#0969da}.markdown-body .markdown-alert-tip{--alert-color:#1a7f37}.markdown-body .markdown-alert-important{--alert-color:#8250df}.markdown-body .markdown-alert-warning{--alert-color:#9a6700}.markdown-body .markdown-alert-caution{--alert-color:#cf222e}.markdown-body .markdown-alert-title{color:var(--alert-color);font-weight:600;display:flex;align-items:center;gap:.5rem}.markdown-body .markdown-alert-title svg{fill:currentColor;flex-shrink:0}.markdown-body .markdown-alert>:last-child{margin-bottom:0}body.dark-mode .markdown-alert-note{--alert-color:#79c0ff}body.dark-mode .markdown-alert-tip{--alert-color:#7ee787}body.dark-mode .markdown-alert-important{--alert-color:#d2a8ff}body.dark-mode .markdown-alert-warning{--alert-color:#e3b341}body.dark-mode .markdown-alert-caution{--alert-color:#ff7b72}.markdown-body .emoji{display:inline;vertical-align:text-bottom}.markdown-body .footnotes{margin-top:2rem;border-top:1px solid var(--border-color,#d0d7de);padding-top:1rem;font-size:.875em}.markdown-body .katex-display{overflow-x:auto;overflow-y:hidden;padding:.25rem 0}.markdown-body .markdown-diagram{margin:1rem 0;border:1px solid var(--border-color,#d0d7de);padding:.75rem}.markdown-body .markdown-diagram svg{display:block;width:100%;max-height:360px}.markdown-body .markdown-diagram path{fill:#a7b2ff;fill-opacity:.5;stroke:var(--link-color,#3b4ad6);stroke-width:1;vector-effect:non-scaling-stroke}.markdown-body .diagram-controls{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}.markdown-body .diagram-controls button{min-width:44px;min-height:44px;padding:.25rem .75rem;border:1px solid var(--border-color,#d0d7de);background:var(--main-bg-color,#fff);color:inherit;border-radius:4px}.markdown-body .diagram-controls button:hover{background:var(--hover-bg-color,#f6f8fa)}.markdown-body .diagram-controls button:focus-visible{outline:2px solid var(--link-color,#0969da);outline-offset:2px}.markdown-body .hljs-keyword,.markdown-body .hljs-selector-tag{color:#cf222e}.markdown-body .hljs-attr,.markdown-body .hljs-string{color:#0a3069}.markdown-body .hljs-literal,.markdown-body .hljs-number,.markdown-body .hljs-title{color:#8250df}.markdown-body .hljs-comment{color:#57606a}body.dark-mode .markdown-body .hljs-keyword{color:#ff7b72}body.dark-mode .markdown-body .hljs-attr,body.dark-mode .markdown-body .hljs-string{color:#a5d6ff}body.dark-mode .markdown-body .hljs-literal,body.dark-mode .markdown-body .hljs-number,body.dark-mode .markdown-body .hljs-title{color:#d2a8ff}body.dark-mode .markdown-body .hljs-comment{color:#b1bac4}body.dark-mode .markdown-body .gh-light-mode-only,body:not(.dark-mode) .markdown-body .gh-dark-mode-only{display:none}@media (max-width:600px){.ov-cache .ov-performance-window{display:grid;grid-template-columns:auto minmax(0,1fr);width:100%}.ov-cache .ov-performance-window select{width:100%;min-width:0}} \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css index fd0f401..fcef212 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -7953,3 +7953,12 @@ body.dark-mode .markdown-body .hljs-comment { color: #b1bac4; } body:not(.dark-mode) .markdown-body .gh-dark-mode-only, body.dark-mode .markdown-body .gh-light-mode-only { display: none; } + +@media (max-width: 600px) { + .ov-cache .ov-performance-window { + display: grid; + grid-template-columns: auto minmax(0, 1fr); + width: 100%; + } + .ov-cache .ov-performance-window select { width: 100%; min-width: 0; } +} diff --git a/public/partials/admin/overview.htm b/public/partials/admin/overview.htm index aa44c7b..5d38c04 100644 --- a/public/partials/admin/overview.htm +++ b/public/partials/admin/overview.htm @@ -276,6 +276,57 @@ +Shared storage, repeated reads and anonymization work · refreshes every 30 seconds
Loading cache monitoring…
+ +Shared blob storage is disabled. Inspection and legacy-cache activity are still measured.
+Shared blobs require a local filesystem. The configured storage continues to use its existing cache.
+ +| Pool | Allocated / budget | Reserved for fills | Original bytes | Blobs | Active readers |
|---|---|---|---|---|---|
| {{ pool.name }} | {{ humanBytes(pool.data?.allocatedBytes) }} / {{ humanBytes(pool.data?.budgetBytes) }} | +{{ humanBytes(pool.data?.reservedBytes) }} | {{ humanBytes(pool.data?.originalBytes) }} | +{{ pool.data?.blobs }} | {{ pool.data?.activeReaders }} |
Source request hit rate: {{ cacheRate('source', 'count') }} · Source byte hit rate: {{ cacheRate('source', 'bytes') }} · Decision hit rate: {{ cacheRate('decision', 'count') }}
+Reuse counts measure consecutive reads of the same blob within each interval. Codec timings are elapsed stream time, not CPU time; eviction times measure how long a blob was idle. Known monitors are identified by request metadata; other automation may remain in file reads.
+| Event | Traffic | Count | Bytes | Mean measured time | p95 bound |
|---|---|---|---|---|---|
| {{ cacheEventName(row.name) }} | {{ row.traffic }} | {{ row.count }} | {{ humanBytes(row.bytes) }} | +{{ row.ms ? (row.ms / row.count).toFixed(2) + " ms" : "Not timed" }} | {{ cacheP95(row) }} |
No cache events in this time range for the selected traffic.
+Updated {{ sampleAge(cacheReport) }} seconds ago. Minute history is retained for 48 hours; hourly history for 30 days.
+ +Loading GitHub info for "+g.repoId+"..."),t.get("/api/admin/repos/"+g.repoId+"/github").then(S=>{b&&(b.document.open(),b.document.write('
'+JSON.stringify(S.data,null,2).replace(/[<>]/g,R=>R==="<"?"<":">")+""),b.document.close())},S=>{let R=S&&S.data?JSON.stringify(S.data,null,2):String(S);b&&(b.document.body.innerHTML='
'+R+"")})},e.statusCountFor=g=>{let b=(e.statusCounts||[]).find(S=>S._id===g);return b?b.count:0},e.statusStorageFor=g=>{let b=(e.statusCounts||[]).find(S=>S._id===g);return b?b.storage:0},e.isErrorsOnly=()=>e.query&&e.query.error&&!e.query.ready&&!e.query.preparing&&!e.query.expired&&!e.query.removed,e.toggleErrorsOnly=()=>{e.isErrorsOnly()?Object.assign(e.query,{ready:!1,preparing:!0,expired:!1,removed:!1,error:!0}):Object.assign(e.query,{ready:!1,preparing:!1,expired:!1,removed:!1,error:!0}),e.query.page=1},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=g=>{e.query.sort===g?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=g,e.query.direction="desc"),e.query.page=1},e.sortIcon=g=>e.query.sort===g?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.repos.filterPrefs",m={page:1,limit:25,sort:"lastView",direction:"desc",search:"",owner:"",conference:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},k=loadFilterPrefs(u)||{};e.query=Object.assign({},m,k,{page:1,search:""});let y=n.search();y.owner&&(e.query.owner=y.owner),y.conference&&(e.query.conference=y.conference),y.search&&(e.query.search=y.search);let E="admin.repos.presets";e.presets=JSON.parse(localStorage.getItem(E)||"[]"),e.savePreset=()=>{let g=window.prompt("Preset name:");if(!g)return;let b=Object.assign({},e.query);delete b.page,e.presets=(e.presets||[]).filter(S=>S.name!==g),e.presets.push({name:g,query:b}),localStorage.setItem(E,JSON.stringify(e.presets))},e.applyPreset=g=>{Object.assign(e.query,g.query,{page:1})},e.deletePreset=g=>{e.presets=(e.presets||[]).filter(b=>b.name!==g.name),localStorage.setItem(E,JSON.stringify(e.presets))},e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.repositories.forEach(g=>{e.selected[g.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(g=>e.selected[g.repoId]),e.bulkRefresh=()=>{let g=e.selectedRepos();g.length&&confirm(`Force refresh ${g.length} repositories?`)&&g.forEach(b=>e.updateRepository(b))},e.bulkRemoveCache=()=>{let g=e.selectedRepos();g.length&&confirm(`Purge cache for ${g.length} repositories?`)&&g.forEach(b=>e.removeCache(b))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let g=new URLSearchParams(Object.entries(e.query).filter(([,b])=>b!==""&&b!==!1&&b!=null));g.set("format","csv"),g.set("limit","10000"),window.open("/api/admin/repos?"+g.toString(),"_blank")},e.removeCache=g=>{confirm("Remove cached files for "+g.repoId+"?")&&t.delete("/api/admin/repos/"+g.repoId).then(()=>h(),b=>console.error(b))},e.removeRepository=g=>{confirm("Remove repository "+g.repoId+"?")&&t.delete("/api/repo/"+g.repoId+"/").then(()=>h(),b=>console.error(b))},e.updateRepository=g=>{let b=Fe({title:`Refreshing ${g.repoId}...`,date:new Date,body:`The repository ${g.repoId} is going to be refreshed.`});e.toasts.push(b),t.post(`/api/repo/${g.repoId}/refresh`).then(S=>{S.data.status=="ready"?b.title=`${g.repoId} is refreshed.`:b.title=`Refreshing of ${g.repoId}.`},S=>{b.title=`Error during the refresh of ${g.repoId}.`,b.body=S.body})},e.fetchError=null;function h(){e.fetchError=null,t.get("/api/admin/repos",{params:e.query}).then(g=>{e.total=g.data.total,e.totalPage=Math.ceil(g.data.total/e.query.limit),e.repositories=g.data.results,e.statusCounts=g.data.statusCounts||[],e.totalSize=g.data.totalSize||0,e.allSelected=!1},g=>{e.fetchError=g&&g.data&&g.data.error||"Failed to load repositories",console.error(g)})}h();let C=null;e.watch("query",()=>{r.timeout.cancel(C),C=r.timeout(h,500);let{page:g,search:b,...S}=e.query;saveFilterPrefs(u,S),a()},!0),a()},yl=function(e,t,n){let r=ut(),s=Zt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.users=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.selected={},e.allSelected=!1;let i=h=>{if(h.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){h.preventDefault();let C=document.querySelector('.admin-filter-toolbar input[type="search"]');C&&C.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=h=>{h==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[h]="",e.query.page=1},e.chips=[];let a=()=>{let h=[];e.query.role&&h.push({key:"role",label:"Role",value:e.query.role}),e.chips=h};e.statusCountFor=h=>{let C=(e.statusCounts||[]).find(g=>g._id===h);return C?C.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=h=>{e.query.sort===h?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=h,e.query.direction="desc"),e.query.page=1},e.sortIcon=h=>e.query.sort===h?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.users.filterPrefs",m={page:1,limit:25,sort:"username",direction:"asc",search:"",status:"",role:"",dateFrom:"",dateTo:""},k=loadFilterPrefs(u)||{};e.query=Object.assign({},m,k,{page:1,search:""}),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.users.forEach(h=>{e.selected[h.username]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedUsers=()=>e.users.filter(h=>e.selected[h.username]),e.banUser=h=>{confirm(`Ban user ${h.username}?`)&&t.post(`/api/admin/users/${h.username}/ban`).then(y,C=>console.error(C))},e.activateUser=h=>{t.post(`/api/admin/users/${h.username}/activate`).then(y,C=>console.error(C))},e.bulkBan=()=>{let h=e.selectedUsers();h.length&&confirm(`Ban ${h.length} users?`)&&h.forEach(C=>e.banUser(C))},e.exportCsv=()=>{let h=new URLSearchParams(Object.entries(e.query).filter(([,C])=>C!==""&&C!==!1&&C!=null));h.set("format","csv"),h.set("limit","10000"),window.open("/api/admin/users?"+h.toString(),"_blank")},e.fetchError=null;function y(){e.fetchError=null,t.get("/api/admin/users",{params:e.query}).then(h=>{e.total=h.data.total,e.totalPage=Math.ceil(h.data.total/e.query.limit),e.users=h.data.results,e.statusCounts=h.data.statusCounts||[],e.allSelected=!1},h=>{e.fetchError=h&&h.data&&h.data.error||"Failed to load users",console.error(h)})}y();let E=null;e.watch("query",()=>{r.timeout.cancel(E),E=r.timeout(y,500);let{page:h,search:C,...g}=e.query;saveFilterPrefs(u,g),a()},!0),a()},gl=function(e,t,n,r){let s=ut();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.userInfo,e.repositories=[],e.search="",e.selected={},e.allSelected=!1;let i="admin.user.filterPrefs",a={filters:{status:{ready:!0,expired:!0,removed:!0,error:!0,preparing:!0}},sort:"anonymizeDate",direction:"desc"},u=loadFilterPrefs(i)||{};e.filters={status:Object.assign({},a.filters.status,u.filters&&u.filters.status||{})},e.query={sort:u.sort||a.sort,direction:u.direction||a.direction},e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort,e.sortBy=h=>{e.query.sort===h?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=h,e.query.direction="desc"),e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort},e.sortIcon=h=>e.query.sort===h?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"",e.watch("query",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.watch("filters",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.statusCountFor=h=>(e.repositories||[]).filter(C=>C.status===h).length,e.repoFiler=h=>e.filters.status[h.status]==!1?!1:!!(e.search.trim().length==0||h.source.fullName.indexOf(e.search)>-1||h.repoId.indexOf(e.search)>-1||h.statusMessage&&h.statusMessage.indexOf(e.search)>-1||h.conference&&h.conference.indexOf(e.search)>-1),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,(e.filteredRepositories||e.repositories).forEach(h=>{e.selected[h.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(h=>e.selected[h.repoId]),e.bulkRefresh=()=>{let h=e.selectedRepos();h.length&&confirm(`Force refresh ${h.length} repositories?`)&&h.forEach(C=>e.updateRepository(C))},e.bulkRemoveCache=()=>{let h=e.selectedRepos();h.length&&confirm(`Purge cache for ${h.length} repositories?`)&&h.forEach(C=>e.removeCache(C))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let h=e.filteredRepositories||e.repositories,g=["repoId","status","statusMessage","pageView","anonymizeDate","source.fullName","conference","size.storage"].join(","),b=h.map(T=>[T.repoId,T.status,T.statusMessage||"",T.pageView||0,T.anonymizeDate||"",T.source&&T.source.fullName||"",T.conference||"",T.size&&T.size.storage||0].map(q=>{let M=String(q??"");return/[",\n\r]/.test(M)?'"'+M.replace(/"/g,'""')+'"':M}).join(",")),S=new Blob([g+` -`+b.join(` -`)],{type:"text/csv"}),R=document.createElement("a");R.href=URL.createObjectURL(S),R.download=r.username+"-repositories.csv",R.click()},e.showStatusMessage=h=>{let C=h.statusMessage||"(no message)";window.prompt(`Status message for ${h.repoId} (${h.status}):`,C)},e.fetchGithubInfo=h=>{let C=window.open("","_blank");C&&C.document.write("
Loading GitHub info for "+h.repoId+"..."),t.get("/api/admin/repos/"+h.repoId+"/github").then(g=>{C&&(C.document.open(),C.document.write('
'+JSON.stringify(g.data,null,2).replace(/[<>]/g,b=>b==="<"?"<":">")+""),C.document.close())},g=>{let b=g&&g.data?JSON.stringify(g.data,null,2):String(g);C&&(C.document.body.innerHTML='
'+b+"")})};function m(h){t.get("/api/admin/users/"+h+"/repos",{}).then(C=>{e.repositories=C.data},C=>{console.error(C)})}function k(h){t.get("/api/admin/users/"+h,{}).then(C=>{e.userInfo=C.data},C=>{console.error(C)})}k(r.username),m(r.username),e.banUser=()=>{confirm(`Ban user ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/ban`).then(()=>k(r.username),h=>console.error(h))},e.activateUser=()=>{t.post(`/api/admin/users/${r.username}/activate`).then(()=>k(r.username),h=>console.error(h))},e.promoteUser=()=>{confirm(`Promote ${r.username} to admin?`)&&t.post(`/api/admin/users/${r.username}/promote`).then(()=>k(r.username),h=>console.error(h))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/demote`).then(()=>k(r.username),h=>console.error(h))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function y(){t.get("/api/admin/tokens").then(h=>{e.tokens=h.data||[]},h=>{h.status!==401&&h.status!==403&&console.error(h)})}y(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(h=>{e.tokenForm.plaintext=h.data.token,e.tokenForm.name="",y()},h=>console.error(h))},e.revokeToken=h=>{confirm(`Revoke token "${h.name}"?`)&&t.delete("/api/admin/tokens/"+h.id).then(()=>y(),C=>console.error(C))},e.removeCache=h=>{confirm("Remove cached files for "+h.repoId+"?")&&t.delete("/api/admin/repos/"+h.repoId).then(()=>m(r.username),C=>console.error(C))},e.removeRepository=h=>{confirm("Remove repository "+h.repoId+"?")&&t.delete("/api/repo/"+h.repoId+"/").then(()=>m(r.username),C=>console.error(C))},e.updateRepository=h=>{let C=Fe({title:`Refreshing ${h.repoId}...`,date:new Date,body:`The repository ${h.repoId} is going to be refreshed.`});e.toasts.push(C),t.post(`/api/repo/${h.repoId}/refresh`).then(g=>{g.data.status=="ready"?C.title=`${h.repoId} is refreshed.`:C.title=`Refreshing of ${h.repoId}.`},g=>{C.title=`Error during the refresh of ${h.repoId}.`,C.body=g.body})},e.getGitHubRepositories=h=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(C=>{e.userInfo.repositories=C.data})};let E=null;e.watch("query",()=>{s.timeout.cancel(E),E=s.timeout(()=>{m(r.username)},500)},!0)},bl=function(e,t,n){let r=ut(),s=Zt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.conferences=[],e.total=-1,e.totalPage=0,e.statusCounts=[];let i=g=>{if(g.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){g.preventDefault();let b=document.querySelector('.admin-filter-toolbar input[type="search"]');b&&b.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=g=>{g==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[g]="",e.query.page=1},e.chips=[];let a=()=>{let g=[];(e.query.dateFrom||e.query.dateTo)&&g.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=g};e.statusCountFor=g=>{let b=(e.statusCounts||[]).find(S=>S._id===g);return b?b.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=g=>{e.query.sort===g?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=g,e.query.direction="desc"),e.query.page=1},e.sortIcon=g=>e.query.sort===g?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.conferences.filterPrefs",m={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},k=loadFilterPrefs(u)||{};e.query=Object.assign({},m,k,{page:1,search:""});let y=n.search();y.search&&(e.query.search=y.search);let E="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(E)||"[]"),e.savePreset=()=>{let g=window.prompt("Preset name:");if(!g)return;let b=Object.assign({},e.query);delete b.page,e.presets=(e.presets||[]).filter(S=>S.name!==g),e.presets.push({name:g,query:b}),localStorage.setItem(E,JSON.stringify(e.presets))},e.applyPreset=g=>{Object.assign(e.query,g.query,{page:1})},e.deletePreset=g=>{e.presets=(e.presets||[]).filter(b=>b.name!==g.name),localStorage.setItem(E,JSON.stringify(e.presets))},e.removeConference=g=>{confirm("Remove conference "+g.conferenceID+"?")&&t.delete("/api/admin/conferences/"+g.conferenceID).then(()=>h(),b=>console.error(b))},e.exportCsv=()=>{let g=new URLSearchParams(Object.entries(e.query).filter(([,b])=>b!==""&&b!==!1&&b!=null));g.set("format","csv"),g.set("limit","10000"),window.open("/api/admin/conferences?"+g.toString(),"_blank")},e.fetchError=null;function h(){e.fetchError=null,t.get("/api/admin/conferences",{params:e.query}).then(g=>{e.total=g.data.total,e.totalPage=Math.ceil(g.data.total/e.query.limit),e.conferences=g.data.results,e.statusCounts=g.data.statusCounts||[]},g=>{e.fetchError=g&&g.data&&g.data.error||"Failed to load conferences",console.error(g)})}h();let C=null;e.watch("query",()=>{r.timeout.cancel(C),C=r.timeout(h,500);let{page:g,search:b,...S}=e.query;saveFilterPrefs(u,S),a()},!0),a()},wl=function(e,t,n,r,s){let i=ut();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.queueList=[],e.jobs=[],e.selectedQueue="download",e.selectedStats=null,e.range="1h",e.allStates=["active","waiting","delayed","failed","completed"],e.stateFilter={active:!0,waiting:!0,delayed:!0,failed:!0,completed:!0},e.query={search:"",autoRefresh:!0},e.filteredJobs=()=>(e.jobs||[]).filter(b=>e.stateFilter[b._state]),e.jobProgressPct=b=>b&&b.progress&&typeof b.progress=="object"&&typeof b.progress.percent=="number"?Math.max(0,Math.min(100,Math.round(b.progress.percent))):typeof b.progress=="number"?Math.max(0,Math.min(100,Math.round(b.progress))):null,e.jobDuration=b=>{if(!b.processedOn)return"-";let R=(b.finishedOn||Date.now())-b.processedOn;return R<1e3?R+"ms":(R/1e3).toFixed(1)+"s"},e.metricsPoints=[],e.selectQueue=b=>{e.selectedQueue=b,a(),u()},e.setRange=b=>{e.range=b,u()};function a(){let b={queue:e.selectedQueue,search:e.query.search};t.get("/api/admin/queues",{params:b}).then(S=>{e.queueList=S.data.queues||[],e.jobs=S.data.jobs||[],e.selectedStats=e.queueList.find(R=>R.key===e.selectedQueue)||e.queueList[0]||null},S=>console.error(S))}function u(){t.get("/api/admin/queues/metrics",{params:{queue:e.selectedQueue,range:e.range}}).then(b=>{e.metricsPoints=b.data.points||[],s(h,0)},b=>console.error(b))}a(),u();let m=r(()=>{e.query.autoRefresh&&(a(),u())},15e3);e.on("dispose",()=>r.cancel(m)),e.refreshNow=function(){a(),u()};function k(b){let S=b&&b.data&&(b.data.message||b.data.error)||"Request failed";e.actionError=S,s(()=>{e.actionError=null},5e3),console.error(b)}e.actionError=null,e.removeJob=b=>{t.delete(`/api/admin/queue/${e.selectedQueue}/${b.id}`).then(a,k)},e.retryJob=b=>{t.post(`/api/admin/queue/${e.selectedQueue}/${b.id}`).then(a,k)},e.retryFailed=()=>{confirm(`Retry all failed jobs in ${e.selectedQueue}?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/retry-failed`).then(a,b=>console.error(b))},e.drainSelected=()=>{confirm(`Drain the ${e.selectedQueue} queue?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/drain`).then(a,b=>console.error(b))},e.togglePause=()=>{let b=e.selectedStats&&e.selectedStats.paused?"resume":"pause";t.post(`/api/admin/queue/${e.selectedQueue}/${b}`).then(a,S=>console.error(S))},e.emptyQueue=()=>{confirm(`Empty the ${e.selectedQueue} queue? This removes ALL jobs.`)&&t.post(`/api/admin/queue/${e.selectedQueue}/empty`).then(a,b=>console.error(b))},e.pauseAll=()=>{confirm("Pause all queues?")&&t.post("/api/admin/queues/pause-all").then(a,b=>console.error(b))};let y=null;e.watch("query.search",()=>{i.timeout.cancel(y),y=i.timeout(a,350)}),e.expanded={},e.toggleJob=b=>{e.expanded[b.id]=!e.expanded[b.id]},e.humanTime=b=>{if(!b)return"";let S=new Date(b);return S.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+" "+S.toLocaleDateString([],{month:"short",day:"numeric"})},e.delayCountdown=b=>{if(!b)return"";var S=Math.max(0,Math.ceil((b-Date.now())/1e3));if(S<=0)return"resuming soon";var R=Math.floor(S/60),T=S%60;return"in "+(R>0?R+"m "+T+"s":T+"s")};function E(b){if(b<=0)return{ticks:[0],niceMax:1};let S=Math.pow(10,Math.floor(Math.log10(b))),R=S;b/R<2?R=S/2:b/R>5&&(R=S*2);let T=Math.ceil(b/R)*R,q=[];for(let M=0;M<=T;M+=R)q.push(M);return{ticks:q,niceMax:T}}function h(){var b=document.getElementById("q-throughput-chart");if(!b)return;var S=b.getContext("2d"),R=window.devicePixelRatio||1,T=b.parentElement.getBoundingClientRect(),q=44,M=50,V=20,z=T.width-40,ne=180,ee=z-q-M,_=ne-V;b.width=z*R,b.height=ne*R,b.style.width=z+"px",b.style.height=ne+"px",S.setTransform(R,0,0,R,0,0);var P=document.body.classList.contains("dark-mode"),G="#8A857C",J=P?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",X=P?"#A7B2FF":"#3B4AD6",W=P?"rgba(167,178,255,0.12)":"rgba(59,74,214,0.08)",se=P?"#F08A82":"#B42318",ce=P?"rgba(240,138,130,0.08)":"rgba(180,35,24,0.06)",de=P?"#F5C842":"#B8860B",re=e.metricsPoints||[];if(re.length===0){S.fillStyle=G,S.font="12px monospace",S.textAlign="center",S.fillText("No metrics data yet",z/2,ne/2),C=null;return}var _e=re.map(function(L){return L.completed}),qe=re.map(function(L){return L.failed}),Me=re.map(function(L){return L.avgMs}),Pe=re.length,Se=ee/(Pe-1||1),ze=Math.max(1,Math.max.apply(null,_e),Math.max.apply(null,qe)),Ue=E(ze),ke=Math.max.apply(null,Me),F=ke>0?E(ke):{ticks:[0],niceMax:1},Z=function(L){return _-L/Ue.niceMax*(_-10)},Q=function(L){return _-L/F.niceMax*(_-10)},te=function(L){return q+L*Se};S.textAlign="right",S.textBaseline="middle",S.font="10px monospace",Ue.ticks.forEach(function(L){var H=Z(L);S.strokeStyle=J,S.lineWidth=1,S.beginPath(),S.moveTo(q,H),S.lineTo(z-M,H),S.stroke(),S.fillStyle=G,S.fillText(L>=1e3?(L/1e3).toFixed(1)+"k":String(L),q-6,H)}),ke>0&&(S.textAlign="left",F.ticks.forEach(function(L){var H=Q(L);S.fillStyle=de,S.fillText(L>=1e3?(L/1e3).toFixed(1)+"s":L+"ms",z-M+6,H)}));var ye=Date.now(),Ee=Math.min(6,Pe);S.textAlign="center",S.textBaseline="top";for(var p=0;p
Manage how GitHub shares your code. Your anonymizations and URLs stay the same.
Sign in to create and manage your anonymizations.
Connect through the GitHub App with read-only repository access.
Sign in with GitHub Your existing anonymizations and connections stay with your account.',6)])])):f("v-if",!0),!e.site_options?.GITHUB_APP_ENABLED&&e.site_options?.GITHUB_OAUTH_ENABLED&&!e.accountRecovery?(l(),d("section",Vf,[...t[3]||(t[3]=[o("div",{class:"connection-title"},[o("h2",null,"Continue with GitHub")],-1),o("p",null,"Sign in to access your account. GitHub OAuth includes write access to private repositories.",-1),o("a",{class:"connection-link",target:"_self",href:"/github/login"},[w("Sign in with GitHub "),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-arrow-right"})])],-1)])])):f("v-if",!0),e.site_options&&!e.site_options.GITHUB_APP_ENABLED&&!e.site_options.GITHUB_OAUTH_ENABLED?(l(),d("p",qf,"GitHub sign-in is currently unavailable. Please try again later.")):f("v-if",!0)])])])}var Mf={class:"paper-empty"};function Dl(e,t){return l(),d("div",Mf,[...t[0]||(t[0]=[ue('The anonymous mirror you\u2019re looking for has expired, been removed by its owner, or never existed. If you received this URL from an author, ask them to re-issue it.
Fill in the details \u2014 it only takes a minute.
Take ownership of an existing anonymized repository so it appears on your dashboard.
',3)),o("div",fR,[t[5]||(t[5]=o("p",{class:"paper-section-copy"},"Use this when an anonymization was created by a co-author or from another account. You must have access to the GitHub repository it was made from.",-1)),N((l(),d("form",{class:"form needs-validation",name:"claimForm",novalidate:"",onSubmit:t[0]||(t[0]=ie(s=>e.submitForm(s,()=>{e.claim()}),["prevent"]))},[o("div",mR,[t[1]||(t[1]=o("label",{class:"paper-field-label",for:"repoUrl"},"GitHub repository URL",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoUrl?.invalid&&(e.claimForm?.repoUrl?.touched||e.claimForm?.submitted)}]),name:"repoUrl",id:"repoUrl",placeholder:"https://github.com/owner/repository",required:""},null,2),[[n,{state:e.viewState,set:s=>{e.repoUrl=s},value:e.repoUrl,form:"claimForm",options:{}}]]),N(o("div",hR," No anonymization matches this repository and ID. Check both values and that you can access the repository on GitHub. ",512),[[j,e.claimForm?.repoUrl?.errors?.not_found]])]),o("div",vR,[t[2]||(t[2]=o("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoId?.invalid&&(e.claimForm?.repoId?.touched||e.claimForm?.submitted)}]),name:"repoId",id:"repoId",placeholder:"e.g. my-paper-7F2A","aria-describedby":"idHelp",required:""},null,2),[[n,{state:e.viewState,set:s=>{e.repoId=s},value:e.repoId,form:"claimForm",options:{}}]]),t[3]||(t[3]=o("small",{id:"idHelp",class:"form-text text-muted"},[w("The ID is the last part of the anonymized URL: "),o("code",null,"anonymous.4open.science/r/Group anonymizations by venue, give chairs a shared dashboard, and set one expiry for every submission.
If something's missing, write to us \u2014 report a bug on GitHub.
Loading GitHub info for "+S.repoId+"..."),t.get("/api/admin/repos/"+S.repoId+"/github").then(_=>{v&&(v.document.open(),v.document.write('
'+JSON.stringify(_.data,null,2).replace(/[<>]/g,N=>N==="<"?"<":">")+""),v.document.close())},_=>{let N=_&&_.data?JSON.stringify(_.data,null,2):String(_);v&&(v.document.body.innerHTML='
'+N+"")})},e.statusCountFor=S=>{let v=(e.statusCounts||[]).find(_=>_._id===S);return v?v.count:0},e.statusStorageFor=S=>{let v=(e.statusCounts||[]).find(_=>_._id===S);return v?v.storage:0},e.isErrorsOnly=()=>e.query&&e.query.error&&!e.query.ready&&!e.query.preparing&&!e.query.expired&&!e.query.removed,e.toggleErrorsOnly=()=>{e.isErrorsOnly()?Object.assign(e.query,{ready:!1,preparing:!0,expired:!1,removed:!1,error:!0}):Object.assign(e.query,{ready:!1,preparing:!1,expired:!1,removed:!1,error:!0}),e.query.page=1},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=S=>{e.query.sort===S?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=S,e.query.direction="desc"),e.query.page=1},e.sortIcon=S=>e.query.sort===S?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.repos.filterPrefs",m={page:1,limit:25,sort:"lastView",direction:"desc",search:"",owner:"",conference:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},w=loadFilterPrefs(u)||{};e.query=Object.assign({},m,w,{page:1,search:""});let g=n.search();g.owner&&(e.query.owner=g.owner),g.conference&&(e.query.conference=g.conference),g.search&&(e.query.search=g.search);let k="admin.repos.presets";e.presets=JSON.parse(localStorage.getItem(k)||"[]"),e.savePreset=()=>{let S=window.prompt("Preset name:");if(!S)return;let v=Object.assign({},e.query);delete v.page,e.presets=(e.presets||[]).filter(_=>_.name!==S),e.presets.push({name:S,query:v}),localStorage.setItem(k,JSON.stringify(e.presets))},e.applyPreset=S=>{Object.assign(e.query,S.query,{page:1})},e.deletePreset=S=>{e.presets=(e.presets||[]).filter(v=>v.name!==S.name),localStorage.setItem(k,JSON.stringify(e.presets))},e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.repositories.forEach(S=>{e.selected[S.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(S=>e.selected[S.repoId]),e.bulkRefresh=()=>{let S=e.selectedRepos();S.length&&confirm(`Force refresh ${S.length} repositories?`)&&S.forEach(v=>e.updateRepository(v))},e.bulkRemoveCache=()=>{let S=e.selectedRepos();S.length&&confirm(`Purge cache for ${S.length} repositories?`)&&S.forEach(v=>e.removeCache(v))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let S=new URLSearchParams(Object.entries(e.query).filter(([,v])=>v!==""&&v!==!1&&v!=null));S.set("format","csv"),S.set("limit","10000"),window.open("/api/admin/repos?"+S.toString(),"_blank")},e.removeCache=S=>{confirm("Remove cached files for "+S.repoId+"?")&&t.delete("/api/admin/repos/"+S.repoId).then(()=>h(),v=>console.error(v))},e.removeRepository=S=>{confirm("Remove repository "+S.repoId+"?")&&t.delete("/api/repo/"+S.repoId+"/").then(()=>h(),v=>console.error(v))},e.updateRepository=S=>{let v=Fe({title:`Refreshing ${S.repoId}...`,date:new Date,body:`The repository ${S.repoId} is going to be refreshed.`});e.toasts.push(v),t.post(`/api/repo/${S.repoId}/refresh`).then(_=>{_.data.status=="ready"?v.title=`${S.repoId} is refreshed.`:v.title=`Refreshing of ${S.repoId}.`},_=>{v.title=`Error during the refresh of ${S.repoId}.`,v.body=_.body})},e.fetchError=null;function h(){e.fetchError=null,t.get("/api/admin/repos",{params:e.query}).then(S=>{e.total=S.data.total,e.totalPage=Math.ceil(S.data.total/e.query.limit),e.repositories=S.data.results,e.statusCounts=S.data.statusCounts||[],e.totalSize=S.data.totalSize||0,e.allSelected=!1},S=>{e.fetchError=S&&S.data&&S.data.error||"Failed to load repositories",console.error(S)})}h();let E=null;e.watch("query",()=>{r.timeout.cancel(E),E=r.timeout(h,500);let{page:S,search:v,..._}=e.query;saveFilterPrefs(u,_),a()},!0),a()},yl=function(e,t,n){let r=ut(),s=Zt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.users=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.selected={},e.allSelected=!1;let i=h=>{if(h.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){h.preventDefault();let E=document.querySelector('.admin-filter-toolbar input[type="search"]');E&&E.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=h=>{h==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[h]="",e.query.page=1},e.chips=[];let a=()=>{let h=[];e.query.role&&h.push({key:"role",label:"Role",value:e.query.role}),e.chips=h};e.statusCountFor=h=>{let E=(e.statusCounts||[]).find(S=>S._id===h);return E?E.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=h=>{e.query.sort===h?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=h,e.query.direction="desc"),e.query.page=1},e.sortIcon=h=>e.query.sort===h?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.users.filterPrefs",m={page:1,limit:25,sort:"username",direction:"asc",search:"",status:"",role:"",dateFrom:"",dateTo:""},w=loadFilterPrefs(u)||{};e.query=Object.assign({},m,w,{page:1,search:""}),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.users.forEach(h=>{e.selected[h.username]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedUsers=()=>e.users.filter(h=>e.selected[h.username]),e.banUser=h=>{confirm(`Ban user ${h.username}?`)&&t.post(`/api/admin/users/${h.username}/ban`).then(g,E=>console.error(E))},e.activateUser=h=>{t.post(`/api/admin/users/${h.username}/activate`).then(g,E=>console.error(E))},e.bulkBan=()=>{let h=e.selectedUsers();h.length&&confirm(`Ban ${h.length} users?`)&&h.forEach(E=>e.banUser(E))},e.exportCsv=()=>{let h=new URLSearchParams(Object.entries(e.query).filter(([,E])=>E!==""&&E!==!1&&E!=null));h.set("format","csv"),h.set("limit","10000"),window.open("/api/admin/users?"+h.toString(),"_blank")},e.fetchError=null;function g(){e.fetchError=null,t.get("/api/admin/users",{params:e.query}).then(h=>{e.total=h.data.total,e.totalPage=Math.ceil(h.data.total/e.query.limit),e.users=h.data.results,e.statusCounts=h.data.statusCounts||[],e.allSelected=!1},h=>{e.fetchError=h&&h.data&&h.data.error||"Failed to load users",console.error(h)})}g();let k=null;e.watch("query",()=>{r.timeout.cancel(k),k=r.timeout(g,500);let{page:h,search:E,...S}=e.query;saveFilterPrefs(u,S),a()},!0),a()},gl=function(e,t,n,r){let s=ut();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.userInfo,e.repositories=[],e.search="",e.selected={},e.allSelected=!1;let i="admin.user.filterPrefs",a={filters:{status:{ready:!0,expired:!0,removed:!0,error:!0,preparing:!0}},sort:"anonymizeDate",direction:"desc"},u=loadFilterPrefs(i)||{};e.filters={status:Object.assign({},a.filters.status,u.filters&&u.filters.status||{})},e.query={sort:u.sort||a.sort,direction:u.direction||a.direction},e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort,e.sortBy=h=>{e.query.sort===h?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=h,e.query.direction="desc"),e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort},e.sortIcon=h=>e.query.sort===h?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"",e.watch("query",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.watch("filters",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.statusCountFor=h=>(e.repositories||[]).filter(E=>E.status===h).length,e.repoFiler=h=>e.filters.status[h.status]==!1?!1:!!(e.search.trim().length==0||h.source.fullName.indexOf(e.search)>-1||h.repoId.indexOf(e.search)>-1||h.statusMessage&&h.statusMessage.indexOf(e.search)>-1||h.conference&&h.conference.indexOf(e.search)>-1),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,(e.filteredRepositories||e.repositories).forEach(h=>{e.selected[h.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(h=>e.selected[h.repoId]),e.bulkRefresh=()=>{let h=e.selectedRepos();h.length&&confirm(`Force refresh ${h.length} repositories?`)&&h.forEach(E=>e.updateRepository(E))},e.bulkRemoveCache=()=>{let h=e.selectedRepos();h.length&&confirm(`Purge cache for ${h.length} repositories?`)&&h.forEach(E=>e.removeCache(E))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let h=e.filteredRepositories||e.repositories,S=["repoId","status","statusMessage","pageView","anonymizeDate","source.fullName","conference","size.storage"].join(","),v=h.map(T=>[T.repoId,T.status,T.statusMessage||"",T.pageView||0,T.anonymizeDate||"",T.source&&T.source.fullName||"",T.conference||"",T.size&&T.size.storage||0].map(V=>{let M=String(V??"");return/[",\n\r]/.test(M)?'"'+M.replace(/"/g,'""')+'"':M}).join(",")),_=new Blob([S+` +`+v.join(` +`)],{type:"text/csv"}),N=document.createElement("a");N.href=URL.createObjectURL(_),N.download=r.username+"-repositories.csv",N.click()},e.showStatusMessage=h=>{let E=h.statusMessage||"(no message)";window.prompt(`Status message for ${h.repoId} (${h.status}):`,E)},e.fetchGithubInfo=h=>{let E=window.open("","_blank");E&&E.document.write("
Loading GitHub info for "+h.repoId+"..."),t.get("/api/admin/repos/"+h.repoId+"/github").then(S=>{E&&(E.document.open(),E.document.write('
'+JSON.stringify(S.data,null,2).replace(/[<>]/g,v=>v==="<"?"<":">")+""),E.document.close())},S=>{let v=S&&S.data?JSON.stringify(S.data,null,2):String(S);E&&(E.document.body.innerHTML='
'+v+"")})};function m(h){t.get("/api/admin/users/"+h+"/repos",{}).then(E=>{e.repositories=E.data},E=>{console.error(E)})}function w(h){t.get("/api/admin/users/"+h,{}).then(E=>{e.userInfo=E.data},E=>{console.error(E)})}w(r.username),m(r.username),e.banUser=()=>{confirm(`Ban user ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/ban`).then(()=>w(r.username),h=>console.error(h))},e.activateUser=()=>{t.post(`/api/admin/users/${r.username}/activate`).then(()=>w(r.username),h=>console.error(h))},e.promoteUser=()=>{confirm(`Promote ${r.username} to admin?`)&&t.post(`/api/admin/users/${r.username}/promote`).then(()=>w(r.username),h=>console.error(h))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/demote`).then(()=>w(r.username),h=>console.error(h))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function g(){t.get("/api/admin/tokens").then(h=>{e.tokens=h.data||[]},h=>{h.status!==401&&h.status!==403&&console.error(h)})}g(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(h=>{e.tokenForm.plaintext=h.data.token,e.tokenForm.name="",g()},h=>console.error(h))},e.revokeToken=h=>{confirm(`Revoke token "${h.name}"?`)&&t.delete("/api/admin/tokens/"+h.id).then(()=>g(),E=>console.error(E))},e.removeCache=h=>{confirm("Remove cached files for "+h.repoId+"?")&&t.delete("/api/admin/repos/"+h.repoId).then(()=>m(r.username),E=>console.error(E))},e.removeRepository=h=>{confirm("Remove repository "+h.repoId+"?")&&t.delete("/api/repo/"+h.repoId+"/").then(()=>m(r.username),E=>console.error(E))},e.updateRepository=h=>{let E=Fe({title:`Refreshing ${h.repoId}...`,date:new Date,body:`The repository ${h.repoId} is going to be refreshed.`});e.toasts.push(E),t.post(`/api/repo/${h.repoId}/refresh`).then(S=>{S.data.status=="ready"?E.title=`${h.repoId} is refreshed.`:E.title=`Refreshing of ${h.repoId}.`},S=>{E.title=`Error during the refresh of ${h.repoId}.`,E.body=S.body})},e.getGitHubRepositories=h=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(E=>{e.userInfo.repositories=E.data})};let k=null;e.watch("query",()=>{s.timeout.cancel(k),k=s.timeout(()=>{m(r.username)},500)},!0)},bl=function(e,t,n){let r=ut(),s=Zt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.conferences=[],e.total=-1,e.totalPage=0,e.statusCounts=[];let i=S=>{if(S.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){S.preventDefault();let v=document.querySelector('.admin-filter-toolbar input[type="search"]');v&&v.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=S=>{S==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[S]="",e.query.page=1},e.chips=[];let a=()=>{let S=[];(e.query.dateFrom||e.query.dateTo)&&S.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=S};e.statusCountFor=S=>{let v=(e.statusCounts||[]).find(_=>_._id===S);return v?v.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=S=>{e.query.sort===S?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=S,e.query.direction="desc"),e.query.page=1},e.sortIcon=S=>e.query.sort===S?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.conferences.filterPrefs",m={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},w=loadFilterPrefs(u)||{};e.query=Object.assign({},m,w,{page:1,search:""});let g=n.search();g.search&&(e.query.search=g.search);let k="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(k)||"[]"),e.savePreset=()=>{let S=window.prompt("Preset name:");if(!S)return;let v=Object.assign({},e.query);delete v.page,e.presets=(e.presets||[]).filter(_=>_.name!==S),e.presets.push({name:S,query:v}),localStorage.setItem(k,JSON.stringify(e.presets))},e.applyPreset=S=>{Object.assign(e.query,S.query,{page:1})},e.deletePreset=S=>{e.presets=(e.presets||[]).filter(v=>v.name!==S.name),localStorage.setItem(k,JSON.stringify(e.presets))},e.removeConference=S=>{confirm("Remove conference "+S.conferenceID+"?")&&t.delete("/api/admin/conferences/"+S.conferenceID).then(()=>h(),v=>console.error(v))},e.exportCsv=()=>{let S=new URLSearchParams(Object.entries(e.query).filter(([,v])=>v!==""&&v!==!1&&v!=null));S.set("format","csv"),S.set("limit","10000"),window.open("/api/admin/conferences?"+S.toString(),"_blank")},e.fetchError=null;function h(){e.fetchError=null,t.get("/api/admin/conferences",{params:e.query}).then(S=>{e.total=S.data.total,e.totalPage=Math.ceil(S.data.total/e.query.limit),e.conferences=S.data.results,e.statusCounts=S.data.statusCounts||[]},S=>{e.fetchError=S&&S.data&&S.data.error||"Failed to load conferences",console.error(S)})}h();let E=null;e.watch("query",()=>{r.timeout.cancel(E),E=r.timeout(h,500);let{page:S,search:v,..._}=e.query;saveFilterPrefs(u,_),a()},!0),a()},wl=function(e,t,n,r,s){let i=ut();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.queueList=[],e.jobs=[],e.selectedQueue="download",e.selectedStats=null,e.range="1h",e.allStates=["active","waiting","delayed","failed","completed"],e.stateFilter={active:!0,waiting:!0,delayed:!0,failed:!0,completed:!0},e.query={search:"",autoRefresh:!0},e.filteredJobs=()=>(e.jobs||[]).filter(v=>e.stateFilter[v._state]),e.jobProgressPct=v=>v&&v.progress&&typeof v.progress=="object"&&typeof v.progress.percent=="number"?Math.max(0,Math.min(100,Math.round(v.progress.percent))):typeof v.progress=="number"?Math.max(0,Math.min(100,Math.round(v.progress))):null,e.jobDuration=v=>{if(!v.processedOn)return"-";let N=(v.finishedOn||Date.now())-v.processedOn;return N<1e3?N+"ms":(N/1e3).toFixed(1)+"s"},e.metricsPoints=[],e.selectQueue=v=>{e.selectedQueue=v,a(),u()},e.setRange=v=>{e.range=v,u()};function a(){let v={queue:e.selectedQueue,search:e.query.search};t.get("/api/admin/queues",{params:v}).then(_=>{e.queueList=_.data.queues||[],e.jobs=_.data.jobs||[],e.selectedStats=e.queueList.find(N=>N.key===e.selectedQueue)||e.queueList[0]||null},_=>console.error(_))}function u(){t.get("/api/admin/queues/metrics",{params:{queue:e.selectedQueue,range:e.range}}).then(v=>{e.metricsPoints=v.data.points||[],s(h,0)},v=>console.error(v))}a(),u();let m=r(()=>{e.query.autoRefresh&&(a(),u())},15e3);e.on("dispose",()=>r.cancel(m)),e.refreshNow=function(){a(),u()};function w(v){let _=v&&v.data&&(v.data.message||v.data.error)||"Request failed";e.actionError=_,s(()=>{e.actionError=null},5e3),console.error(v)}e.actionError=null,e.removeJob=v=>{t.delete(`/api/admin/queue/${e.selectedQueue}/${v.id}`).then(a,w)},e.retryJob=v=>{t.post(`/api/admin/queue/${e.selectedQueue}/${v.id}`).then(a,w)},e.retryFailed=()=>{confirm(`Retry all failed jobs in ${e.selectedQueue}?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/retry-failed`).then(a,v=>console.error(v))},e.drainSelected=()=>{confirm(`Drain the ${e.selectedQueue} queue?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/drain`).then(a,v=>console.error(v))},e.togglePause=()=>{let v=e.selectedStats&&e.selectedStats.paused?"resume":"pause";t.post(`/api/admin/queue/${e.selectedQueue}/${v}`).then(a,_=>console.error(_))},e.emptyQueue=()=>{confirm(`Empty the ${e.selectedQueue} queue? This removes ALL jobs.`)&&t.post(`/api/admin/queue/${e.selectedQueue}/empty`).then(a,v=>console.error(v))},e.pauseAll=()=>{confirm("Pause all queues?")&&t.post("/api/admin/queues/pause-all").then(a,v=>console.error(v))};let g=null;e.watch("query.search",()=>{i.timeout.cancel(g),g=i.timeout(a,350)}),e.expanded={},e.toggleJob=v=>{e.expanded[v.id]=!e.expanded[v.id]},e.humanTime=v=>{if(!v)return"";let _=new Date(v);return _.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+" "+_.toLocaleDateString([],{month:"short",day:"numeric"})},e.delayCountdown=v=>{if(!v)return"";var _=Math.max(0,Math.ceil((v-Date.now())/1e3));if(_<=0)return"resuming soon";var N=Math.floor(_/60),T=_%60;return"in "+(N>0?N+"m "+T+"s":T+"s")};function k(v){if(v<=0)return{ticks:[0],niceMax:1};let _=Math.pow(10,Math.floor(Math.log10(v))),N=_;v/N<2?N=_/2:v/N>5&&(N=_*2);let T=Math.ceil(v/N)*N,V=[];for(let M=0;M<=T;M+=N)V.push(M);return{ticks:V,niceMax:T}}function h(){var v=document.getElementById("q-throughput-chart");if(!v)return;var _=v.getContext("2d"),N=window.devicePixelRatio||1,T=v.parentElement.getBoundingClientRect(),V=44,M=50,q=20,z=T.width-40,ne=180,ee=z-V-M,C=ne-q;v.width=z*N,v.height=ne*N,v.style.width=z+"px",v.style.height=ne+"px",_.setTransform(N,0,0,N,0,0);var P=document.body.classList.contains("dark-mode"),G="#8A857C",J=P?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",X=P?"#A7B2FF":"#3B4AD6",K=P?"rgba(167,178,255,0.12)":"rgba(59,74,214,0.08)",se=P?"#F08A82":"#B42318",ce=P?"rgba(240,138,130,0.08)":"rgba(180,35,24,0.06)",ue=P?"#F5C842":"#B8860B",re=e.metricsPoints||[];if(re.length===0){_.fillStyle=G,_.font="12px monospace",_.textAlign="center",_.fillText("No metrics data yet",z/2,ne/2),E=null;return}var _e=re.map(function(L){return L.completed}),qe=re.map(function(L){return L.failed}),Me=re.map(function(L){return L.avgMs}),Pe=re.length,Se=ee/(Pe-1||1),ze=Math.max(1,Math.max.apply(null,_e),Math.max.apply(null,qe)),Ue=k(ze),ke=Math.max.apply(null,Me),F=ke>0?k(ke):{ticks:[0],niceMax:1},Z=function(L){return C-L/Ue.niceMax*(C-10)},Q=function(L){return C-L/F.niceMax*(C-10)},te=function(L){return V+L*Se};_.textAlign="right",_.textBaseline="middle",_.font="10px monospace",Ue.ticks.forEach(function(L){var H=Z(L);_.strokeStyle=J,_.lineWidth=1,_.beginPath(),_.moveTo(V,H),_.lineTo(z-M,H),_.stroke(),_.fillStyle=G,_.fillText(L>=1e3?(L/1e3).toFixed(1)+"k":String(L),V-6,H)}),ke>0&&(_.textAlign="left",F.ticks.forEach(function(L){var H=Q(L);_.fillStyle=ue,_.fillText(L>=1e3?(L/1e3).toFixed(1)+"s":L+"ms",z-M+6,H)}));var ye=Date.now(),Ee=Math.min(6,Pe);_.textAlign="center",_.textBaseline="top";for(var p=0;p
Manage how GitHub shares your code. Your anonymizations and URLs stay the same.
Sign in to create and manage your anonymizations.
Connect through the GitHub App with read-only repository access.
Sign in with GitHub Your existing anonymizations and connections stay with your account.',6)])])):f("v-if",!0),!e.site_options?.GITHUB_APP_ENABLED&&e.site_options?.GITHUB_OAUTH_ENABLED&&!e.accountRecovery?(l(),d("section",Vf,[...t[3]||(t[3]=[o("div",{class:"connection-title"},[o("h2",null,"Continue with GitHub")],-1),o("p",null,"Sign in to access your account. GitHub OAuth includes write access to private repositories.",-1),o("a",{class:"connection-link",target:"_self",href:"/github/login"},[b("Sign in with GitHub "),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-arrow-right"})])],-1)])])):f("v-if",!0),e.site_options&&!e.site_options.GITHUB_APP_ENABLED&&!e.site_options.GITHUB_OAUTH_ENABLED?(l(),d("p",qf,"GitHub sign-in is currently unavailable. Please try again later.")):f("v-if",!0)])])])}var Mf={class:"paper-empty"};function Rl(e,t){return l(),d("div",Mf,[...t[0]||(t[0]=[de('The anonymous mirror you\u2019re looking for has expired, been removed by its owner, or never existed. If you received this URL from an author, ask them to re-issue it.
Fill in the details \u2014 it only takes a minute.
Take ownership of an existing anonymized repository so it appears on your dashboard.
',3)),o("div",AD,[t[5]||(t[5]=o("p",{class:"paper-section-copy"},"Use this when an anonymization was created by a co-author or from another account. You must have access to the GitHub repository it was made from.",-1)),R((l(),d("form",{class:"form needs-validation",name:"claimForm",novalidate:"",onSubmit:t[0]||(t[0]=ie(s=>e.submitForm(s,()=>{e.claim()}),["prevent"]))},[o("div",OD,[t[1]||(t[1]=o("label",{class:"paper-field-label",for:"repoUrl"},"GitHub repository URL",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoUrl?.invalid&&(e.claimForm?.repoUrl?.touched||e.claimForm?.submitted)}]),name:"repoUrl",id:"repoUrl",placeholder:"https://github.com/owner/repository",required:""},null,2),[[n,{state:e.viewState,set:s=>{e.repoUrl=s},value:e.repoUrl,form:"claimForm",options:{}}]]),R(o("div",ID," No anonymization matches this repository and ID. Check both values and that you can access the repository on GitHub. ",512),[[j,e.claimForm?.repoUrl?.errors?.not_found]])]),o("div",PD,[t[2]||(t[2]=o("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoId?.invalid&&(e.claimForm?.repoId?.touched||e.claimForm?.submitted)}]),name:"repoId",id:"repoId",placeholder:"e.g. my-paper-7F2A","aria-describedby":"idHelp",required:""},null,2),[[n,{state:e.viewState,set:s=>{e.repoId=s},value:e.repoId,form:"claimForm",options:{}}]]),t[3]||(t[3]=o("small",{id:"idHelp",class:"form-text text-muted"},[b("The ID is the last part of the anonymized URL: "),o("code",null,"anonymous.4open.science/r/Group anonymizations by venue, give chairs a shared dashboard, and set one expiry for every submission.
If something's missing, write to us \u2014 report a bug on GitHub.

The GitHub App has read-only access to gists and the repositories you choose. Legacy OAuth uses broader permissions. Anonymous GitHub never writes to your repositories.
Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Text files are anonymized; enabled images and PDFs are served unchanged.
You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over.
Track PR mirrors you\u2019ve created and their reviewer traffic.

The GitHub App has read-only access to gists and the repositories you choose. Legacy OAuth uses broader permissions. Anonymous GitHub never writes to your repositories.
Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Text files are anonymized; enabled images and PDFs are served unchanged.
You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over.
Track PR mirrors you\u2019ve created and their reviewer traffic.
Defaults applied to every new anonymization, your quotas, and your account.
',3)),o("div",Dq,[N((l(),d("aside",Rq,[...t[8]||(t[8]=[ue('A small team keeps this running. If it helps you, please consider contributing back \u2014 in code, ideas, or coffee.
Collaborate by implementing new features and fixing bugs. Help with new file formats or deployment is welcome.
Open on GitHubTell us about bugs and missing features in Anonymous GitHub itself. Questions about an anonymized repository go to its authors.
File an issueServer costs hover around $25 a month. Any contribution helps keep the lights on.
GitHub Sponsors| '+(u.oldNo||"")+' | '+(u.newNo||"")+' | '+(u.kind==="add"?"+":u.kind==="remove"?"-":u.kind==="hunk"?"@":"")+' | '+t(u.text)+" |
Defaults applied to every new anonymization, your quotas, and your account.
',3)),o("div",jq,[R((l(),d("aside",Gq,[...t[8]||(t[8]=[de('A small team keeps this running. If it helps you, please consider contributing back \u2014 in code, ideas, or coffee.
Collaborate by implementing new features and fixing bugs. Help with new file formats or deployment is welcome.
Open on GitHubTell us about bugs and missing features in Anonymous GitHub itself. Questions about an anonymized repository go to its authors.
File an issueServer costs hover around $25 a month. Any contribution helps keep the lights on.
GitHub Sponsors| '+(u.oldNo||"")+' | '+(u.newNo||"")+' | '+(u.kind==="add"?"+":u.kind==="remove"?"-":u.kind==="hunk"?"@":"")+' | '+t(u.text)+" |