Finish sex and kink

This commit is contained in:
Madison Scott-Clary
2019-09-26 00:17:27 -07:00
parent 2bf2fb038e
commit 059f85af29
20 changed files with 4819 additions and 4232 deletions

1
.gitignore vendored
View File

@ -10,3 +10,4 @@ _site/*
.bundle
/public
/resources
/content/sex/kink/unspeakable.md

View File

@ -1,3 +0,0 @@
---
type: chronological
---

View File

@ -0,0 +1,5 @@
---
type: chronological
---
<div class="info">Viewing in chronological order</div>

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@ date: 2019-09-24
weight: 1
---
Cathline Schine writes in *The Evolution of Jane*:
Cathleen Schine writes in *The Evolution of Jane*:
<div class="verse">I resented the state of childhood wonder. It was insatiable, yet it seemed to me to be no more than a puerile affliction, like baby teeth. My ignorance struck me as a bizarre anomaly, for I felt, with utter certainty, that I was --- how can I say this? --- that I was *sufficient*. Evidence to the contrary forced itself on me every hour of every day, but that seemed to me some preposterous misunderstanding.</div>

View File

@ -34,12 +34,16 @@ But our relationships were as real as any collocated flings. More so, we told ou
Im sure we all hungered for touch.</div>
> Did you? Hunger for touch, that is.
> Did you?
Did I what? Write bits of my life into furry fiction?
> Hunger for touch.
In some cases, sure. I wanted nothing more than to hold, to be held. I wanted nothing more than to experience arousal and climax with these people I loved.
> And that was the problem.
Yes. The problem was that I wanted to experience arousal and climax, but not really the whole sex part. Or perhaps I wanted that frictionless sex that can be accomplished in typefucking. I wanted that consequence-free, painless, perfectly-lubricated and utterly messless sex.
Yes. The problem was that I wanted to experience arousal and climax, but not really the whole sex part. Or perhaps I wanted that frictionless sex that can be accomplished in typefucking. I wanted that consequence-free, painless, perfectly-lubricated and utterly mess-less sex.
Even then, I'm not so sure.

View File

@ -5,11 +5,11 @@ weight: 3
The problem was that I didn't really want sex. I loved the idea of it, loved reading and writing about it, loved ERP, loved consuming art, loved thinking about it, loved masturbating. I just didn't really love sex itself.
Not for lack of trying, mind. I played around with my partners, tamping down my anxiety and squeamishness in order to try and just enjoy myself, enjoy our times together. Often, I was at least reasonably successful, too. I still have fond memories of some fun romps
Not for lack of trying, mind. I played around with my partners, tamping down my anxiety and squeamishness in order to try and just enjoy myself, enjoy our times together. Often, I was at least reasonably successful, too. I still have fond memories of some fun romps.
> What rankled?
It was a few things, I think. The most obvious being the increasing dissonance between my body and my identity as 'male' started to fit less and less. When having a penis seems odd and dischordant, engaging with it feels unsatisfactory at best, nauseating at worst.
It was a few things, I think. The most obvious being the increasing dissonance between my body and my identity as 'male' started to fit less and less. When having a penis seems odd and discordant, engaging with it feels unsatisfactory at best, nauseating at worst.
Another was simply the mess of it all. Water-based lube gets sticky. Condoms are finicky. Fluid-bonding is great, but then the mess is magnified. Foreskin is complicated --- a rough weekend left me scarred, the resulting phimosis making sex something of an adventure.
@ -19,7 +19,7 @@ I think, most often, it was just that it was a lot of work. You had to set aside
Yes, there was plenty of that. The unswerving sense that I had messed up. That I was doing something wrong. That this was all so disgusting. That this baffling act of smashing meat together was somehow a positive thing, but I just couldn't see how.
> You tried to cleanse yourself of that. You went to the Underground parties. You gathered around you a core group of people you trusted and played with them. You worked to extract that shame from yourself so that you could live without it.
> You tried to cleanse yourself of that with <a class="pulse" href="/self-harm">TIASAP</a>. You also tried going the other way. You went to the Underground parties. You gathered around you a core group of people you trusted and played with them. You worked to extract that shame from yourself so that you could live without it.
Sometimes it worked. Sometimes it was a matter of the stars aligning.

View File

@ -1,8 +1,13 @@
---
type: serial
back: /poly/6
background: '#eeeef8'
color: '#111111'
quote: '#333333'
---
<div class="cw">Frank discussions of sex and sexuality</div>
<!--
Things to talk about:

18
content/sex/kink/001.md Normal file
View File

@ -0,0 +1,18 @@
---
date: 2019-09-25
weight: 1
---
What do you do when you've got a libido and relatively little will to act upon it? Delve into kink.
> Well, and fuck around on Taps a lot.
The two go hand in hand. When sex makes you intensely anxious, it turns out that getting tied up and blindfolded just sort of multiplies that anxiety.
> So you removed yourself from the equation.
Close enough, yes. I let my characters bear the weight of kink and sexual interaction. Textually, there's a vast divide between what's on the screen and what's going on in person. I can get all I need from kink without actually needing to interact with it.
> And what do you need from kink?
Beyond just fantasy fulfillment? A way to cope, I suppose.

48
content/sex/kink/002.md Normal file
View File

@ -0,0 +1,48 @@
---
date: 2019-09-25
weight: 2
---
[![Kink bingo](/sex/kink/bingo.svg)](https://bbbingo.me/preparations-squadrons-voices-spans)
> I'm not really sure what to make of the fact that you made a bingo card for your kinks.
Well, hey, hit bingo, and maybe I explode or something. Besides, [bbbingo](https://bbbingo.me) was for a game jam.
> So tell me about your free space.
Actually, I think many of them come from a similar space: recasting bad or uncomfortable experiences from childhood into some positive light. A way to reclaim them and make them positive again.
> How is humiliation positive?
Okay, maybe some of them are not so much 'again'.
> I don't imagine non-consensual sex ever was, no.
Not really, but using kink as a coping mechanism for anxieties around rape is at least a way forward for me.
Ditto humiliation. Being made to feel inadequate, often by people I was supposed to look up to, was such a negative force in my life --- in Matthew's life --- that it left me with quite a bit of baggage. This is just a way to sort through it.
> Sexily.
I suppose. It's something of a metakink. Many of the others stem from that, or from a similar core interest.
Scent-play as a means of degradation: why would a snow leopard smell of canine? Fits in nicely with knotting. Why not toss in some species denial, too; no more kitty, you say 'arf' now.
Scruffing, in the context of furry, especially with felines, is a means of rendering one helpless. Coercion and weakened mental states fit as well. Those all sort of tag along with the non-consensual core kink
> So, pain and blood? Breathplay?
Yes. Abuse. Damage. Bad ends.
> Where do those come from?
Self hatred. Self harm. Destroy me before I destroy myself.
> Really?
No, of course not.
> But some part of you actively believes that? Some part of you actively craves someone destroying you? Beating you bloody? Choking you? Leaving you for dead with casual nonchalance?
Yes.

47
content/sex/kink/003.html Normal file
View File

@ -0,0 +1,47 @@
---
date: 2019-09-25
weight: 3
---
<blockquote>Why are you doing this?</blockquote>
<p>It's sensitive. It's difficult to talk about. It's my life, it's my site, it's my art. Why would I not?</p>
<blockquote>Because this is supposed to be honest. This is supposed to be you baring your soul to the world. This is supposed to be your memoir.</blockquote>
<p>I suppose. But still, it <em>is</em> mine, first and foremost.</p>
<form id="decrypt-form" onsubmit="decrypt()">
<label for="passphrase">
<input type="text" name="passphrase" id="passphrase" placeholder="Passphrase" />
</label>
<button type="submit">Decrypt</button>
</form>
<div id="decrypted"></div>
<script type="text/javascript" src="/js/sjcl-1.0.6/sjcl.js"></script>
<script type="text/javascript" src="/js/marked-0.3.6/marked.min.js"></script>
<script type="text/javascript">
const encrypted = '{"iv":"BEQzETQyV+L5o6kkkinPfg==","v":1,"iter":10000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"EaqvxVQMCnY=","ct":"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"}';
function decrypt() {
window.event.preventDefault();
const passphrase = document.querySelector('#passphrase').value;
document.querySelector('#decrypt-form').remove()
try {
var decrypted = sjcl.decrypt(passphrase, encrypted);
document.querySelector('#decrypted').innerHTML = marked(decrypted);
} catch(e) {
document.getElementById('decrypted').innerHTML = marked(`...
I'm sorry. I'm so sorry.
> To whom are you apologizing?
Myself, perhaps. You. Everyone.
Needless to say, that's not the passphrase. I'm sorry. If you don't know it, if I haven't told you, I'm sorry.`);
}
}
</script>

30
content/sex/kink/004.md Normal file
View File

@ -0,0 +1,30 @@
---
date: 2019-09-25
weight: 4
---
> Do you enjoy vanilla sex, then?
Perhaps. I suppose I must. So much of what I did for so long, online and off, was vanilla. Even now, much of it is.
> Yet "sneps are for abusing".
Yes.
> Why?
I enjoy vanilla sex. It feels good. All this kink, though, helps me grow. It's exposure therapy.
It was exposure therapy when a TS partner on Taps laughed in my face as he raped me and left me to clean myself up. It is exposure therapy because I can say no, because I can enjoy being tied up now.
It was exposure therapy when I was ordered to describe what I wanted in lurid detail. It's exposure therapy because I can talk about sex now.
It was exposure therapy when I entered into a few master/pet relationships. It's exposure therapy because at some point I was able to handle a power-dynamic in my relationships.
It was exposure therapy when I spent scene after scene toying with fertility. It's exposure therapy because at some point I was able to deal with the idea of not being cis, of motherhood being unattainable.
It was exposure therapy when I made my character a pudgy nerd and still able to engage with her sexually. It's exposure therapy because I've been able to come to terms with my body.
> It's exposure therapy because at some point, you started enjoying sex and the thought of sharing that with someone.
Yes.

View File

@ -1,7 +1,13 @@
---
type: serial
back: /sex/4
background: '#17111a'
color: '#ffffff'
quote: '#ffffff'
---
<div class="cw">Frank discussions of sexuality and kink (along with some problematic ones)</div>
<!--
Things to talk about:

6
static/js/marked-0.3.6/marked.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,60 @@
"use strict";var sjcl={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return"CORRUPT: "+this.message};this.message=a},invalid:function(a){this.toString=function(){return"INVALID: "+this.message};this.message=a},bug:function(a){this.toString=function(){return"BUG: "+this.message};this.message=a},notReady:function(a){this.toString=function(){return"NOT READY: "+this.message};this.message=a}}};
sjcl.cipher.aes=function(a){this.s[0][0][0]||this.O();var b,c,d,e,f=this.s[0][4],g=this.s[1];b=a.length;var h=1;if(4!==b&&6!==b&&8!==b)throw new sjcl.exception.invalid("invalid aes key size");this.b=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(0===a%b||8===b&&4===a%b)c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255],0===a%b&&(c=c<<8^c>>>24^h<<24,h=h<<1^283*(h>>7));d[a]=d[a-b]^c}for(b=0;a;b++,a--)c=d[b&3?a:a-4],e[b]=4>=a||4>b?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^g[3][f[c&
255]]};
sjcl.cipher.aes.prototype={encrypt:function(a){return t(this,a,0)},decrypt:function(a){return t(this,a,1)},s:[[[],[],[],[],[]],[[],[],[],[],[]]],O:function(){var a=this.s[0],b=this.s[1],c=a[4],d=b[4],e,f,g,h=[],k=[],l,n,m,p;for(e=0;0x100>e;e++)k[(h[e]=e<<1^283*(e>>7))^e]=e;for(f=g=0;!c[f];f^=l||1,g=k[g]||1)for(m=g^g<<1^g<<2^g<<3^g<<4,m=m>>8^m&255^99,c[f]=m,d[m]=f,n=h[e=h[l=h[f]]],p=0x1010101*n^0x10001*e^0x101*l^0x1010100*f,n=0x101*h[m]^0x1010100*m,e=0;4>e;e++)a[e][f]=n=n<<24^n>>>8,b[e][m]=p=p<<24^p>>>8;for(e=
0;5>e;e++)a[e]=a[e].slice(0),b[e]=b[e].slice(0)}};
function t(a,b,c){if(4!==b.length)throw new sjcl.exception.invalid("invalid aes block size");var d=a.b[c],e=b[0]^d[0],f=b[c?3:1]^d[1],g=b[2]^d[2];b=b[c?1:3]^d[3];var h,k,l,n=d.length/4-2,m,p=4,r=[0,0,0,0];h=a.s[c];a=h[0];var q=h[1],v=h[2],w=h[3],x=h[4];for(m=0;m<n;m++)h=a[e>>>24]^q[f>>16&255]^v[g>>8&255]^w[b&255]^d[p],k=a[f>>>24]^q[g>>16&255]^v[b>>8&255]^w[e&255]^d[p+1],l=a[g>>>24]^q[b>>16&255]^v[e>>8&255]^w[f&255]^d[p+2],b=a[b>>>24]^q[e>>16&255]^v[f>>8&255]^w[g&255]^d[p+3],p+=4,e=h,f=k,g=l;for(m=
0;4>m;m++)r[c?3&-m:m]=x[e>>>24]<<24^x[f>>16&255]<<16^x[g>>8&255]<<8^x[b&255]^d[p++],h=e,e=f,f=g,g=b,b=h;return r}
sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.$(a.slice(b/32),32-(b&31)).slice(1);return void 0===c?a:sjcl.bitArray.clamp(a,c-b)},extract:function(a,b,c){var d=Math.floor(-b-c&31);return((b+c-1^b)&-32?a[b/32|0]<<32-d^a[b/32+1|0]>>>d:a[b/32|0]>>>d)&(1<<c)-1},concat:function(a,b){if(0===a.length||0===b.length)return a.concat(b);var c=a[a.length-1],d=sjcl.bitArray.getPartial(c);return 32===d?a.concat(b):sjcl.bitArray.$(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var b=a.length;return 0===
b?0:32*(b-1)+sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(32*a.length<b)return a;a=a.slice(0,Math.ceil(b/32));var c=a.length;b=b&31;0<c&&b&&(a[c-1]=sjcl.bitArray.partial(b,a[c-1]&2147483648>>b-1,1));return a},partial:function(a,b,c){return 32===a?b:(c?b|0:b<<32-a)+0x10000000000*a},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return!1;var c=0,d;for(d=0;d<a.length;d++)c|=a[d]^b[d];return 0===
c},$:function(a,b,c,d){var e;e=0;for(void 0===d&&(d=[]);32<=b;b-=32)d.push(c),c=0;if(0===b)return d.concat(a);for(e=0;e<a.length;e++)d.push(c|a[e]>>>b),c=a[e]<<32-b;e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,32<b+a?c:d.pop(),1));return d},i:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]},byteswapM:function(a){var b,c;for(b=0;b<a.length;++b)c=a[b],a[b]=c>>>24|c>>>8&0xff00|(c&0xff00)<<8|c<<24;return a}};
sjcl.codec.utf8String={fromBits:function(a){var b="",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d<c/8;d++)0===(d&3)&&(e=a[d/4]),b+=String.fromCharCode(e>>>24),e<<=8;return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c<a.length;c++)d=d<<8|a.charCodeAt(c),3===(c&3)&&(b.push(d),d=0);c&3&&b.push(sjcl.bitArray.partial(8*(c&3),d));return b}};
sjcl.codec.hex={fromBits:function(a){var b="",c;for(c=0;c<a.length;c++)b+=((a[c]|0)+0xf00000000000).toString(16).substr(4);return b.substr(0,sjcl.bitArray.bitLength(a)/4)},toBits:function(a){var b,c=[],d;a=a.replace(/\s|0x/g,"");d=a.length;a=a+"00000000";for(b=0;b<a.length;b+=8)c.push(parseInt(a.substr(b,8),16)^0);return sjcl.bitArray.clamp(c,4*d)}};
sjcl.codec.base32={B:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",X:"0123456789ABCDEFGHIJKLMNOPQRSTUV",BITS:32,BASE:5,REMAINING:27,fromBits:function(a,b,c){var d=sjcl.codec.base32.BASE,e=sjcl.codec.base32.REMAINING,f="",g=0,h=sjcl.codec.base32.B,k=0,l=sjcl.bitArray.bitLength(a);c&&(h=sjcl.codec.base32.X);for(c=0;f.length*d<l;)f+=h.charAt((k^a[c]>>>g)>>>e),g<d?(k=a[c]<<d-g,g+=e,c++):(k<<=d,g-=d);for(;f.length&7&&!b;)f+="=";return f},toBits:function(a,b){a=a.replace(/\s|=/g,"").toUpperCase();var c=sjcl.codec.base32.BITS,
d=sjcl.codec.base32.BASE,e=sjcl.codec.base32.REMAINING,f=[],g,h=0,k=sjcl.codec.base32.B,l=0,n,m="base32";b&&(k=sjcl.codec.base32.X,m="base32hex");for(g=0;g<a.length;g++){n=k.indexOf(a.charAt(g));if(0>n){if(!b)try{return sjcl.codec.base32hex.toBits(a)}catch(p){}throw new sjcl.exception.invalid("this isn't "+m+"!");}h>e?(h-=e,f.push(l^n>>>h),l=n<<c-h):(h+=d,l^=n<<c-h)}h&56&&f.push(sjcl.bitArray.partial(h&56,l,1));return f}};
sjcl.codec.base32hex={fromBits:function(a,b){return sjcl.codec.base32.fromBits(a,b,1)},toBits:function(a){return sjcl.codec.base32.toBits(a,1)}};
sjcl.codec.base64={B:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",fromBits:function(a,b,c){var d="",e=0,f=sjcl.codec.base64.B,g=0,h=sjcl.bitArray.bitLength(a);c&&(f=f.substr(0,62)+"-_");for(c=0;6*d.length<h;)d+=f.charAt((g^a[c]>>>e)>>>26),6>e?(g=a[c]<<6-e,e+=26,c++):(g<<=6,e-=6);for(;d.length&3&&!b;)d+="=";return d},toBits:function(a,b){a=a.replace(/\s|=/g,"");var c=[],d,e=0,f=sjcl.codec.base64.B,g=0,h;b&&(f=f.substr(0,62)+"-_");for(d=0;d<a.length;d++){h=f.indexOf(a.charAt(d));
if(0>h)throw new sjcl.exception.invalid("this isn't base64!");26<e?(e-=26,c.push(g^h>>>e),g=h<<32-e):(e+=6,g^=h<<32-e)}e&56&&c.push(sjcl.bitArray.partial(e&56,g,1));return c}};sjcl.codec.base64url={fromBits:function(a){return sjcl.codec.base64.fromBits(a,1,1)},toBits:function(a){return sjcl.codec.base64.toBits(a,1)}};sjcl.hash.sha256=function(a){this.b[0]||this.O();a?(this.F=a.F.slice(0),this.A=a.A.slice(0),this.l=a.l):this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()};
sjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.F=this.Y.slice(0);this.A=[];this.l=0;return this},update:function(a){"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));var b,c=this.A=sjcl.bitArray.concat(this.A,a);b=this.l;a=this.l=b+sjcl.bitArray.bitLength(a);if(0x1fffffffffffff<a)throw new sjcl.exception.invalid("Cannot hash more than 2^53 - 1 bits");if("undefined"!==typeof Uint32Array){var d=new Uint32Array(c),e=0;for(b=512+b-(512+b&0x1ff);b<=a;b+=512)u(this,d.subarray(16*e,
16*(e+1))),e+=1;c.splice(0,16*e)}else for(b=512+b-(512+b&0x1ff);b<=a;b+=512)u(this,c.splice(0,16));return this},finalize:function(){var a,b=this.A,c=this.F,b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);b.push(Math.floor(this.l/0x100000000));for(b.push(this.l|0);b.length;)u(this,b.splice(0,16));this.reset();return c},Y:[],b:[],O:function(){function a(a){return 0x100000000*(a-Math.floor(a))|0}for(var b=0,c=2,d,e;64>b;c++){e=!0;for(d=2;d*d<=c;d++)if(0===c%d){e=
!1;break}e&&(8>b&&(this.Y[b]=a(Math.pow(c,.5))),this.b[b]=a(Math.pow(c,1/3)),b++)}}};
function u(a,b){var c,d,e,f=a.F,g=a.b,h=f[0],k=f[1],l=f[2],n=f[3],m=f[4],p=f[5],r=f[6],q=f[7];for(c=0;64>c;c++)16>c?d=b[c]:(d=b[c+1&15],e=b[c+14&15],d=b[c&15]=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+b[c&15]+b[c+9&15]|0),d=d+q+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(r^m&(p^r))+g[c],q=r,r=p,p=m,m=n+d|0,n=l,l=k,k=h,h=d+(k&l^n&(k^l))+(k>>>2^k>>>13^k>>>22^k<<30^k<<19^k<<10)|0;f[0]=f[0]+h|0;f[1]=f[1]+k|0;f[2]=f[2]+l|0;f[3]=f[3]+n|0;f[4]=f[4]+m|0;f[5]=f[5]+p|0;f[6]=f[6]+r|0;f[7]=
f[7]+q|0}
sjcl.mode.ccm={name:"ccm",G:[],listenProgress:function(a){sjcl.mode.ccm.G.push(a)},unListenProgress:function(a){a=sjcl.mode.ccm.G.indexOf(a);-1<a&&sjcl.mode.ccm.G.splice(a,1)},fa:function(a){var b=sjcl.mode.ccm.G.slice(),c;for(c=0;c<b.length;c+=1)b[c](a)},encrypt:function(a,b,c,d,e){var f,g=b.slice(0),h=sjcl.bitArray,k=h.bitLength(c)/8,l=h.bitLength(g)/8;e=e||64;d=d||[];if(7>k)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(f=2;4>f&&l>>>8*f;f++);f<15-k&&(f=15-k);c=h.clamp(c,
8*(15-f));b=sjcl.mode.ccm.V(a,b,c,d,e,f);g=sjcl.mode.ccm.C(a,g,c,b,e,f);return h.concat(g.data,g.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var f=sjcl.bitArray,g=f.bitLength(c)/8,h=f.bitLength(b),k=f.clamp(b,h-e),l=f.bitSlice(b,h-e),h=(h-e)/8;if(7>g)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(b=2;4>b&&h>>>8*b;b++);b<15-g&&(b=15-g);c=f.clamp(c,8*(15-b));k=sjcl.mode.ccm.C(a,k,c,l,e,b);a=sjcl.mode.ccm.V(a,k.data,c,d,e,b);if(!f.equal(k.tag,a))throw new sjcl.exception.corrupt("ccm: tag doesn't match");
return k.data},na:function(a,b,c,d,e,f){var g=[],h=sjcl.bitArray,k=h.i;d=[h.partial(8,(b.length?64:0)|d-2<<2|f-1)];d=h.concat(d,c);d[3]|=e;d=a.encrypt(d);if(b.length)for(c=h.bitLength(b)/8,65279>=c?g=[h.partial(16,c)]:0xffffffff>=c&&(g=h.concat([h.partial(16,65534)],[c])),g=h.concat(g,b),b=0;b<g.length;b+=4)d=a.encrypt(k(d,g.slice(b,b+4).concat([0,0,0])));return d},V:function(a,b,c,d,e,f){var g=sjcl.bitArray,h=g.i;e/=8;if(e%2||4>e||16<e)throw new sjcl.exception.invalid("ccm: invalid tag length");
if(0xffffffff<d.length||0xffffffff<b.length)throw new sjcl.exception.bug("ccm: can't deal with 4GiB or more data");c=sjcl.mode.ccm.na(a,d,c,e,g.bitLength(b)/8,f);for(d=0;d<b.length;d+=4)c=a.encrypt(h(c,b.slice(d,d+4).concat([0,0,0])));return g.clamp(c,8*e)},C:function(a,b,c,d,e,f){var g,h=sjcl.bitArray;g=h.i;var k=b.length,l=h.bitLength(b),n=k/50,m=n;c=h.concat([h.partial(8,f-1)],c).concat([0,0,0]).slice(0,4);d=h.bitSlice(g(d,a.encrypt(c)),0,e);if(!k)return{tag:d,data:[]};for(g=0;g<k;g+=4)g>n&&(sjcl.mode.ccm.fa(g/
k),n+=m),c[3]++,e=a.encrypt(c),b[g]^=e[0],b[g+1]^=e[1],b[g+2]^=e[2],b[g+3]^=e[3];return{tag:d,data:h.clamp(b,l)}}};
sjcl.mode.ocb2={name:"ocb2",encrypt:function(a,b,c,d,e,f){if(128!==sjcl.bitArray.bitLength(c))throw new sjcl.exception.invalid("ocb iv must be 128 bits");var g,h=sjcl.mode.ocb2.S,k=sjcl.bitArray,l=k.i,n=[0,0,0,0];c=h(a.encrypt(c));var m,p=[];d=d||[];e=e||64;for(g=0;g+4<b.length;g+=4)m=b.slice(g,g+4),n=l(n,m),p=p.concat(l(c,a.encrypt(l(c,m)))),c=h(c);m=b.slice(g);b=k.bitLength(m);g=a.encrypt(l(c,[0,0,0,b]));m=k.clamp(l(m.concat([0,0,0]),g),b);n=l(n,l(m.concat([0,0,0]),g));n=a.encrypt(l(n,l(c,h(c))));
d.length&&(n=l(n,f?d:sjcl.mode.ocb2.pmac(a,d)));return p.concat(k.concat(m,k.clamp(n,e)))},decrypt:function(a,b,c,d,e,f){if(128!==sjcl.bitArray.bitLength(c))throw new sjcl.exception.invalid("ocb iv must be 128 bits");e=e||64;var g=sjcl.mode.ocb2.S,h=sjcl.bitArray,k=h.i,l=[0,0,0,0],n=g(a.encrypt(c)),m,p,r=sjcl.bitArray.bitLength(b)-e,q=[];d=d||[];for(c=0;c+4<r/32;c+=4)m=k(n,a.decrypt(k(n,b.slice(c,c+4)))),l=k(l,m),q=q.concat(m),n=g(n);p=r-32*c;m=a.encrypt(k(n,[0,0,0,p]));m=k(m,h.clamp(b.slice(c),p).concat([0,
0,0]));l=k(l,m);l=a.encrypt(k(l,k(n,g(n))));d.length&&(l=k(l,f?d:sjcl.mode.ocb2.pmac(a,d)));if(!h.equal(h.clamp(l,e),h.bitSlice(b,r)))throw new sjcl.exception.corrupt("ocb: tag doesn't match");return q.concat(h.clamp(m,p))},pmac:function(a,b){var c,d=sjcl.mode.ocb2.S,e=sjcl.bitArray,f=e.i,g=[0,0,0,0],h=a.encrypt([0,0,0,0]),h=f(h,d(d(h)));for(c=0;c+4<b.length;c+=4)h=d(h),g=f(g,a.encrypt(f(h,b.slice(c,c+4))));c=b.slice(c);128>e.bitLength(c)&&(h=f(h,d(h)),c=e.concat(c,[-2147483648,0,0,0]));g=f(g,c);
return a.encrypt(f(d(f(h,d(h))),g))},S:function(a){return[a[0]<<1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^135*(a[0]>>>31)]}};
sjcl.mode.gcm={name:"gcm",encrypt:function(a,b,c,d,e){var f=b.slice(0);b=sjcl.bitArray;d=d||[];a=sjcl.mode.gcm.C(!0,a,f,d,c,e||128);return b.concat(a.data,a.tag)},decrypt:function(a,b,c,d,e){var f=b.slice(0),g=sjcl.bitArray,h=g.bitLength(f);e=e||128;d=d||[];e<=h?(b=g.bitSlice(f,h-e),f=g.bitSlice(f,0,h-e)):(b=f,f=[]);a=sjcl.mode.gcm.C(!1,a,f,d,c,e);if(!g.equal(a.tag,b))throw new sjcl.exception.corrupt("gcm: tag doesn't match");return a.data},ka:function(a,b){var c,d,e,f,g,h=sjcl.bitArray.i;e=[0,0,
0,0];f=b.slice(0);for(c=0;128>c;c++){(d=0!==(a[Math.floor(c/32)]&1<<31-c%32))&&(e=h(e,f));g=0!==(f[3]&1);for(d=3;0<d;d--)f[d]=f[d]>>>1|(f[d-1]&1)<<31;f[0]>>>=1;g&&(f[0]^=-0x1f000000)}return e},j:function(a,b,c){var d,e=c.length;b=b.slice(0);for(d=0;d<e;d+=4)b[0]^=0xffffffff&c[d],b[1]^=0xffffffff&c[d+1],b[2]^=0xffffffff&c[d+2],b[3]^=0xffffffff&c[d+3],b=sjcl.mode.gcm.ka(b,a);return b},C:function(a,b,c,d,e,f){var g,h,k,l,n,m,p,r,q=sjcl.bitArray;m=c.length;p=q.bitLength(c);r=q.bitLength(d);h=q.bitLength(e);
g=b.encrypt([0,0,0,0]);96===h?(e=e.slice(0),e=q.concat(e,[1])):(e=sjcl.mode.gcm.j(g,[0,0,0,0],e),e=sjcl.mode.gcm.j(g,e,[0,0,Math.floor(h/0x100000000),h&0xffffffff]));h=sjcl.mode.gcm.j(g,[0,0,0,0],d);n=e.slice(0);d=h.slice(0);a||(d=sjcl.mode.gcm.j(g,h,c));for(l=0;l<m;l+=4)n[3]++,k=b.encrypt(n),c[l]^=k[0],c[l+1]^=k[1],c[l+2]^=k[2],c[l+3]^=k[3];c=q.clamp(c,p);a&&(d=sjcl.mode.gcm.j(g,h,c));a=[Math.floor(r/0x100000000),r&0xffffffff,Math.floor(p/0x100000000),p&0xffffffff];d=sjcl.mode.gcm.j(g,d,a);k=b.encrypt(e);
d[0]^=k[0];d[1]^=k[1];d[2]^=k[2];d[3]^=k[3];return{tag:q.bitSlice(d,0,f),data:c}}};sjcl.misc.hmac=function(a,b){this.W=b=b||sjcl.hash.sha256;var c=[[],[]],d,e=b.prototype.blockSize/32;this.w=[new b,new b];a.length>e&&(a=b.hash(a));for(d=0;d<e;d++)c[0][d]=a[d]^909522486,c[1][d]=a[d]^1549556828;this.w[0].update(c[0]);this.w[1].update(c[1]);this.R=new b(this.w[0])};
sjcl.misc.hmac.prototype.encrypt=sjcl.misc.hmac.prototype.mac=function(a){if(this.aa)throw new sjcl.exception.invalid("encrypt on already updated hmac called!");this.update(a);return this.digest(a)};sjcl.misc.hmac.prototype.reset=function(){this.R=new this.W(this.w[0]);this.aa=!1};sjcl.misc.hmac.prototype.update=function(a){this.aa=!0;this.R.update(a)};sjcl.misc.hmac.prototype.digest=function(){var a=this.R.finalize(),a=(new this.W(this.w[1])).update(a).finalize();this.reset();return a};
sjcl.misc.pbkdf2=function(a,b,c,d,e){c=c||1E4;if(0>d||0>c)throw new sjcl.exception.invalid("invalid params to pbkdf2");"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));"string"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));e=e||sjcl.misc.hmac;a=new e(a);var f,g,h,k,l=[],n=sjcl.bitArray;for(k=1;32*l.length<(d||1);k++){e=f=a.encrypt(n.concat(b,[k]));for(g=1;g<c;g++)for(f=a.encrypt(f),h=0;h<f.length;h++)e[h]^=f[h];l=l.concat(e)}d&&(l=n.clamp(l,d));return l};
sjcl.prng=function(a){this.c=[new sjcl.hash.sha256];this.m=[0];this.P=0;this.H={};this.N=0;this.U={};this.Z=this.f=this.o=this.ha=0;this.b=[0,0,0,0,0,0,0,0];this.h=[0,0,0,0];this.L=void 0;this.M=a;this.D=!1;this.K={progress:{},seeded:{}};this.u=this.ga=0;this.I=1;this.J=2;this.ca=0x10000;this.T=[0,48,64,96,128,192,0x100,384,512,768,1024];this.da=3E4;this.ba=80};
sjcl.prng.prototype={randomWords:function(a,b){var c=[],d;d=this.isReady(b);var e;if(d===this.u)throw new sjcl.exception.notReady("generator isn't seeded");if(d&this.J){d=!(d&this.I);e=[];var f=0,g;this.Z=e[0]=(new Date).valueOf()+this.da;for(g=0;16>g;g++)e.push(0x100000000*Math.random()|0);for(g=0;g<this.c.length&&(e=e.concat(this.c[g].finalize()),f+=this.m[g],this.m[g]=0,d||!(this.P&1<<g));g++);this.P>=1<<this.c.length&&(this.c.push(new sjcl.hash.sha256),this.m.push(0));this.f-=f;f>this.o&&(this.o=
f);this.P++;this.b=sjcl.hash.sha256.hash(this.b.concat(e));this.L=new sjcl.cipher.aes(this.b);for(d=0;4>d&&(this.h[d]=this.h[d]+1|0,!this.h[d]);d++);}for(d=0;d<a;d+=4)0===(d+1)%this.ca&&y(this),e=z(this),c.push(e[0],e[1],e[2],e[3]);y(this);return c.slice(0,a)},setDefaultParanoia:function(a,b){if(0===a&&"Setting paranoia=0 will ruin your security; use it only for testing"!==b)throw new sjcl.exception.invalid("Setting paranoia=0 will ruin your security; use it only for testing");this.M=a},addEntropy:function(a,
b,c){c=c||"user";var d,e,f=(new Date).valueOf(),g=this.H[c],h=this.isReady(),k=0;d=this.U[c];void 0===d&&(d=this.U[c]=this.ha++);void 0===g&&(g=this.H[c]=0);this.H[c]=(this.H[c]+1)%this.c.length;switch(typeof a){case "number":void 0===b&&(b=1);this.c[g].update([d,this.N++,1,b,f,1,a|0]);break;case "object":c=Object.prototype.toString.call(a);if("[object Uint32Array]"===c){e=[];for(c=0;c<a.length;c++)e.push(a[c]);a=e}else for("[object Array]"!==c&&(k=1),c=0;c<a.length&&!k;c++)"number"!==typeof a[c]&&
(k=1);if(!k){if(void 0===b)for(c=b=0;c<a.length;c++)for(e=a[c];0<e;)b++,e=e>>>1;this.c[g].update([d,this.N++,2,b,f,a.length].concat(a))}break;case "string":void 0===b&&(b=a.length);this.c[g].update([d,this.N++,3,b,f,a.length]);this.c[g].update(a);break;default:k=1}if(k)throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string");this.m[g]+=b;this.f+=b;h===this.u&&(this.isReady()!==this.u&&A("seeded",Math.max(this.o,this.f)),A("progress",this.getProgress()))},
isReady:function(a){a=this.T[void 0!==a?a:this.M];return this.o&&this.o>=a?this.m[0]>this.ba&&(new Date).valueOf()>this.Z?this.J|this.I:this.I:this.f>=a?this.J|this.u:this.u},getProgress:function(a){a=this.T[a?a:this.M];return this.o>=a?1:this.f>a?1:this.f/a},startCollectors:function(){if(!this.D){this.a={loadTimeCollector:B(this,this.ma),mouseCollector:B(this,this.oa),keyboardCollector:B(this,this.la),accelerometerCollector:B(this,this.ea),touchCollector:B(this,this.qa)};if(window.addEventListener)window.addEventListener("load",
this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new sjcl.exception.bug("can't attach event");
this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",
this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(a,b){this.K[a][this.ga++]=b},removeEventListener:function(a,b){var c,d,e=this.K[a],f=[];for(d in e)e.hasOwnProperty(d)&&e[d]===b&&f.push(d);for(c=0;c<f.length;c++)d=f[c],delete e[d]},la:function(){C(this,1)},oa:function(a){var b,c;try{b=a.x||a.clientX||a.offsetX||0,c=a.y||a.clientY||a.offsetY||0}catch(d){c=b=0}0!=b&&0!=c&&this.addEntropy([b,c],2,"mouse");C(this,0)},qa:function(a){a=
a.touches[0]||a.changedTouches[0];this.addEntropy([a.pageX||a.clientX,a.pageY||a.clientY],1,"touch");C(this,0)},ma:function(){C(this,2)},ea:function(a){a=a.accelerationIncludingGravity.x||a.accelerationIncludingGravity.y||a.accelerationIncludingGravity.z;if(window.orientation){var b=window.orientation;"number"===typeof b&&this.addEntropy(b,1,"accelerometer")}a&&this.addEntropy(a,2,"accelerometer");C(this,0)}};
function A(a,b){var c,d=sjcl.random.K[a],e=[];for(c in d)d.hasOwnProperty(c)&&e.push(d[c]);for(c=0;c<e.length;c++)e[c](b)}function C(a,b){"undefined"!==typeof window&&window.performance&&"function"===typeof window.performance.now?a.addEntropy(window.performance.now(),b,"loadtime"):a.addEntropy((new Date).valueOf(),b,"loadtime")}function y(a){a.b=z(a).concat(z(a));a.L=new sjcl.cipher.aes(a.b)}function z(a){for(var b=0;4>b&&(a.h[b]=a.h[b]+1|0,!a.h[b]);b++);return a.L.encrypt(a.h)}
function B(a,b){return function(){b.apply(a,arguments)}}sjcl.random=new sjcl.prng(6);
a:try{var D,E,F,G;if(G="undefined"!==typeof module&&module.exports){var H;try{H=require("crypto")}catch(a){H=null}G=E=H}if(G&&E.randomBytes)D=E.randomBytes(128),D=new Uint32Array((new Uint8Array(D)).buffer),sjcl.random.addEntropy(D,1024,"crypto['randomBytes']");else if("undefined"!==typeof window&&"undefined"!==typeof Uint32Array){F=new Uint32Array(32);if(window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(F);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(F);
else break a;sjcl.random.addEntropy(F,1024,"crypto['getRandomValues']")}}catch(a){"undefined"!==typeof window&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(a))}
sjcl.json={defaults:{v:1,iter:1E4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ja:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,f=e.g({iv:sjcl.random.randomWords(4,0)},e.defaults),g;e.g(f,c);c=f.adata;"string"===typeof f.salt&&(f.salt=sjcl.codec.base64.toBits(f.salt));"string"===typeof f.iv&&(f.iv=sjcl.codec.base64.toBits(f.iv));if(!sjcl.mode[f.mode]||!sjcl.cipher[f.cipher]||"string"===typeof a&&100>=f.iter||64!==f.ts&&96!==f.ts&&128!==f.ts||128!==f.ks&&192!==f.ks&&0x100!==f.ks||2>f.iv.length||
4<f.iv.length)throw new sjcl.exception.invalid("json encrypt: invalid parameters");"string"===typeof a?(g=sjcl.misc.cachedPbkdf2(a,f),a=g.key.slice(0,f.ks/32),f.salt=g.salt):sjcl.ecc&&a instanceof sjcl.ecc.elGamal.publicKey&&(g=a.kem(),f.kemtag=g.tag,a=g.key.slice(0,f.ks/32));"string"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));"string"===typeof c&&(f.adata=c=sjcl.codec.utf8String.toBits(c));g=new sjcl.cipher[f.cipher](a);e.g(d,f);d.key=a;f.ct="ccm"===f.mode&&sjcl.arrayBuffer&&sjcl.arrayBuffer.ccm&&
b instanceof ArrayBuffer?sjcl.arrayBuffer.ccm.encrypt(g,b,f.iv,c,f.ts):sjcl.mode[f.mode].encrypt(g,b,f.iv,c,f.ts);return f},encrypt:function(a,b,c,d){var e=sjcl.json,f=e.ja.apply(e,arguments);return e.encode(f)},ia:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json;b=e.g(e.g(e.g({},e.defaults),b),c,!0);var f,g;f=b.adata;"string"===typeof b.salt&&(b.salt=sjcl.codec.base64.toBits(b.salt));"string"===typeof b.iv&&(b.iv=sjcl.codec.base64.toBits(b.iv));if(!sjcl.mode[b.mode]||!sjcl.cipher[b.cipher]||"string"===
typeof a&&100>=b.iter||64!==b.ts&&96!==b.ts&&128!==b.ts||128!==b.ks&&192!==b.ks&&0x100!==b.ks||!b.iv||2>b.iv.length||4<b.iv.length)throw new sjcl.exception.invalid("json decrypt: invalid parameters");"string"===typeof a?(g=sjcl.misc.cachedPbkdf2(a,b),a=g.key.slice(0,b.ks/32),b.salt=g.salt):sjcl.ecc&&a instanceof sjcl.ecc.elGamal.secretKey&&(a=a.unkem(sjcl.codec.base64.toBits(b.kemtag)).slice(0,b.ks/32));"string"===typeof f&&(f=sjcl.codec.utf8String.toBits(f));g=new sjcl.cipher[b.cipher](a);f="ccm"===
b.mode&&sjcl.arrayBuffer&&sjcl.arrayBuffer.ccm&&b.ct instanceof ArrayBuffer?sjcl.arrayBuffer.ccm.decrypt(g,b.ct,b.iv,b.tag,f,b.ts):sjcl.mode[b.mode].decrypt(g,b.ct,b.iv,f,b.ts);e.g(d,b);d.key=a;return 1===c.raw?f:sjcl.codec.utf8String.fromBits(f)},decrypt:function(a,b,c,d){var e=sjcl.json;return e.ia(a,e.decode(b),c,d)},encode:function(a){var b,c="{",d="";for(b in a)if(a.hasOwnProperty(b)){if(!b.match(/^[a-z0-9]+$/i))throw new sjcl.exception.invalid("json encode: invalid property name");c+=d+'"'+
b+'":';d=",";switch(typeof a[b]){case "number":case "boolean":c+=a[b];break;case "string":c+='"'+escape(a[b])+'"';break;case "object":c+='"'+sjcl.codec.base64.fromBits(a[b],0)+'"';break;default:throw new sjcl.exception.bug("json encode: unsupported type");}}return c+"}"},decode:function(a){a=a.replace(/\s/g,"");if(!a.match(/^\{.*\}$/))throw new sjcl.exception.invalid("json decode: this isn't json!");a=a.replace(/^\{|\}$/g,"").split(/,/);var b={},c,d;for(c=0;c<a.length;c++){if(!(d=a[c].match(/^\s*(?:(["']?)([a-z][a-z0-9]*)\1)\s*:\s*(?:(-?\d+)|"([a-z0-9+\/%*_.@=\-]*)"|(true|false))$/i)))throw new sjcl.exception.invalid("json decode: this isn't json!");
null!=d[3]?b[d[2]]=parseInt(d[3],10):null!=d[4]?b[d[2]]=d[2].match(/^(ct|adata|salt|iv)$/)?sjcl.codec.base64.toBits(d[4]):unescape(d[4]):null!=d[5]&&(b[d[2]]="true"===d[5])}return b},g:function(a,b,c){void 0===a&&(a={});if(void 0===b)return a;for(var d in b)if(b.hasOwnProperty(d)){if(c&&void 0!==a[d]&&a[d]!==b[d])throw new sjcl.exception.invalid("required parameter overridden");a[d]=b[d]}return a},sa:function(a,b){var c={},d;for(d in a)a.hasOwnProperty(d)&&a[d]!==b[d]&&(c[d]=a[d]);return c},ra:function(a,
b){var c={},d;for(d=0;d<b.length;d++)void 0!==a[b[d]]&&(c[b[d]]=a[b[d]]);return c}};sjcl.encrypt=sjcl.json.encrypt;sjcl.decrypt=sjcl.json.decrypt;sjcl.misc.pa={};sjcl.misc.cachedPbkdf2=function(a,b){var c=sjcl.misc.pa,d;b=b||{};d=b.iter||1E3;c=c[a]=c[a]||{};d=c[d]=c[d]||{firstSalt:b.salt&&b.salt.length?b.salt.slice(0):sjcl.random.randomWords(2,0)};c=void 0===b.salt?d.firstSalt:b.salt;d[c]=d[c]||sjcl.misc.pbkdf2(a,c,b.iter);return{key:d[c].slice(0),salt:c.slice(0)}};
"undefined"!==typeof module&&module.exports&&(module.exports=sjcl);"function"===typeof define&&define([],function(){return sjcl});

View File

@ -2,6 +2,94 @@ digraph Map {
node[shape="box"]
label=""
// The following must appear before the ally group in order to position them
// on the left side.
node[group="aside",style="",fontcolor="#111111"]
"Aside 1" [href="/aside/1"]
"Aside 2" [href="/aside/2"]
"Aside 3" [href="/aside/3"]
node[group="dad",style="filled",fillcolor="#cccccc",fontcolor="#222222"]
"Dad 1" [href="/dad/1"]
"Dad 2" [href="/dad/2"]
"Dad 3" [href="/dad/3"]
"Dad 4" [href="/dad/4"]
"Dad 5" [href="/dad/5"]
"Dad 6" [href="/dad/6"]
"Dad 7" [href="/dad/7"]
"Dad 8" [href="/dad/8"]
"Dad 9" [href="/dad/9"]
"Dad 10" [href="/dad/10"]
"Dad 11" [href="/dad/11"]
"Dad 1" -> "Dad 2" -> "Dad 3" -> "Dad 4" -> "Dad 5" ->
"Dad 6" -> "Dad 7" -> "Dad 8" -> "Dad 9" -> "Dad 10" ->
"Dad 11"
node[group="from-within",style="filled",fillcolor="#333a18",fontcolor="#ccddcc"]
"From within 1" [href="/from-within/"]
"From within 2" [href="/from-within/2"]
"From within 3" [href="/from-within/3",fillcolor="#283a26"]
"From within 4" [href="/from-within/4",fillcolor="#082a16",fontcolor="#bbccbb"]
"From within 5" [href="/from-within/5",fillcolor="#082010",fontcolor="#aabbaa"]
"From within 6" [href="/from-within/i-guess..",fillcolor="#001a06",fontcolor="#aabbaa"]
"From within 1" -> "From within 2" -> "From within 3" -> "From within 4" ->
"From within 5" -> "From within 6"
node[group="jay",style="filled",fillcolor="#eeddff",fontcolor="#222288"]
"Jay 1" [href="/jay/"]
"Jay 2" [href="/jay/2"]
"Jay 3" [href="/jay/3"]
"Jay 4" [href="/jay/4"]
"Jay 5" [href="/jay/5"]
"Jay 6" [href="/jay/6"]
"Jay 1" -> "Jay 2" -> "Jay 3" -> "Jay 4" -> "Jay 5" -> "Jay 6"
node[group="liminal",style="",fontcolor="#111111"]
"Liminal 1" [href="/liminal"]
"Liminal 2" [href="/liminal/2"]
"Liminal 3" [href="/liminal/3"]
"Liminal 4" [href="/liminal/4"]
"Liminal 5" [href="/liminal/5"]
"Liminal 6" [href="/liminal/6"]
"Liminal 7" [href="/liminal/7"]
"Liminal 8" [href="/liminal/8"]
"Liminal 1" -> "Liminal 2" -> "Liminal 3" -> "Liminal 4" ->
"Liminal 5" -> "Liminal 6" -> "Liminal 7" -> "Liminal 8"
node[group="poly",style="",fontcolor="#111111"]
"Poly 1" [href="/poly"]
"Poly 2" [href="/poly/2"]
"Poly 3" [href="/poly/3"]
"Poly 4" [href="/poly/4"]
"Poly 5" [href="/poly/5"]
"Poly 6" [href="/poly/6"]
"Poly 1" -> "Poly 2" -> "Poly 3" -> "Poly 4" -> "Poly 5" -> "Poly 6"
node[group="sex",style="filled",fillcolor="#eeeef8",fontcolor="#111111"]
"Sex 1" [href="/sex"]
"Sex 2" [href="/sex/2"]
"Sex 3" [href="/sex/3"]
"Sex 4" [href="/sex/4"]
"Sex 1" -> "Sex 2" -> "Sex 3" -> "Sex 4"
node[group="kink",style="filled",fillcolor="#17111a",fontcolor="#ffffff"]
"Kink 1" [href="/sex/kink"]
"Kink 2" [href="/sex/kink/2"]
"Kink 3" [href="/sex/kink/3"]
"Kink 4" [href="/sex/kink/4"]
"Kink 1" -> "Kink 2" -> "Kink 3" -> "Kink 4"
node[group="software",style="filled",fillcolor="#eaf5ff",fontcolor="#05264c"]
"Software 1" [href="https://github.com/makyo/ally/pull/4/commits/c7d73fc7a727d34728b353a2c428b0da71788bf0"]
"Software 2" [href="https://github.com/makyo/ally/pull/4/commits/04b7300615386bccbb331caebcf396077f6fc9ea"]
"Software 3" [href="https://github.com/makyo/ally/pull/4/commits/d73e63f3fdc0bce89f06334959ade28888a2f7b2"]
"Software 4" [href="https://github.com/makyo/ally/pull/4/commits/90acc199cd80944f6c5eb6834a2fa67783db4d7d"]
"Software 5" [href="https://github.com/makyo/ally/pull/4/commits/49f83b2148f70151c43f8ef77a061e7252d9b1d4"]
"Software 6" [href="https://github.com/makyo/ally/pull/4/commits/ab8302ca2f6ca00c0a5bdfebcb4b2f2291ec9833"]
"Software 1" -> "Software 2" -> "Software 3" -> "Software 4" ->
"Software 5" -> "Software 6"
// This is the central axis
node[group="ally",style="",fontcolor="#111111"] // `core` folder
"ally 1" [href="/"]
"ally 2" [href="/2"]
@ -35,11 +123,6 @@ digraph Map {
"ally 11" -> "ally 12" -> "ally 13" -> "ally 14" -> "ally 15" ->
"ally 16" -> "ally 17" -> "ally 18" -> "ally 19" -> "ally 20" -> "ally 21" -> "ally 22" -> "ally 23" -> "ally 24" -> "ally 25" -> "ally 26" -> "To be continued..."
node[group="aside",style="",fontcolor="#111111"]
"Aside 1" [href="/aside/1"]
"Aside 2" [href="/aside/2"]
"Aside 3" [href="/aside/3"]
node[group="birds",style="",fontcolor="#111111"]
"Birds 1" [href="/birds"]
"Birds 2" [href="/birds/2"]
@ -48,31 +131,15 @@ digraph Map {
"Birds 5" [href="/birds/5"]
"Birds 1" -> "Birds 2" -> "Birds 3" -> "Birds 4" -> "Birds 5"
node[group="dad",style="filled",fillcolor="#cccccc",fontcolor="#222222"]
"Dad 1" [href="/dad/1"]
"Dad 2" [href="/dad/2"]
"Dad 3" [href="/dad/3"]
"Dad 4" [href="/dad/4"]
"Dad 5" [href="/dad/5"]
"Dad 6" [href="/dad/6"]
"Dad 7" [href="/dad/7"]
"Dad 8" [href="/dad/8"]
"Dad 9" [href="/dad/9"]
"Dad 10" [href="/dad/10"]
"Dad 11" [href="/dad/11"]
"Dad 1" -> "Dad 2" -> "Dad 3" -> "Dad 4" -> "Dad 5" ->
"Dad 6" -> "Dad 7" -> "Dad 8" -> "Dad 9" -> "Dad 10" ->
"Dad 11"
node[group="from-within",style="filled",fillcolor="#333a18",fontcolor="#ccddcc"]
"From within 1" [href="/from-within/"]
"From within 2" [href="/from-within/2"]
"From within 3" [href="/from-within/3",fillcolor="#283a26"]
"From within 4" [href="/from-within/4",fillcolor="#082a16",fontcolor="#bbccbb"]
"From within 5" [href="/from-within/5",fillcolor="#082010",fontcolor="#aabbaa"]
"From within 6" [href="/from-within/i-guess..",fillcolor="#001a06",fontcolor="#aabbaa"]
"From within 1" -> "From within 2" -> "From within 3" -> "From within 4" ->
"From within 5" -> "From within 6"
// Must come before Furry to position it to the left.
node[group="koan",style="filled",fillcolor="#1f183a",fontcolor="#ccccdd"]
"Koan 1" [href="/koan/"]
"Koan 2" [href="/koan/2"]
"Koan 3" [href="/koan/3"]
"Koan 4" [href="/koan/4"]
"Koan 5" [href="/koan/5"]
"Koan 6" [href="/koan/6"]
"Koan 1" -> "Koan 2" -> "Koan 3" -> "Koan 4" -> "Koan 5" -> "Koan 6"
node[group="furry",style="",fontcolor="#111111"]
"Furry 1" [href="/furry"]
@ -113,36 +180,6 @@ digraph Map {
"Younes 3" [href="/furry/younes/3"]
"Younes 1" -> "Younes 2" -> "Younes 3"
node[group="jay",style="filled",fillcolor="#eeddff",fontcolor="#222288"]
"Jay 1" [href="/jay/"]
"Jay 2" [href="/jay/2"]
"Jay 3" [href="/jay/3"]
"Jay 4" [href="/jay/4"]
"Jay 5" [href="/jay/5"]
"Jay 6" [href="/jay/6"]
"Jay 1" -> "Jay 2" -> "Jay 3" -> "Jay 4" -> "Jay 5" -> "Jay 6"
node[group="koan",style="filled",fillcolor="#1f183a",fontcolor="#ccccdd"]
"Koan 1" [href="/koan/"]
"Koan 2" [href="/koan/2"]
"Koan 3" [href="/koan/3"]
"Koan 4" [href="/koan/4"]
"Koan 5" [href="/koan/5"]
"Koan 6" [href="/koan/6"]
"Koan 1" -> "Koan 2" -> "Koan 3" -> "Koan 4" -> "Koan 5" -> "Koan 6"
node[group="liminal",style="",fontcolor="#111111"]
"Liminal 1" [href="/liminal"]
"Liminal 2" [href="/liminal/2"]
"Liminal 3" [href="/liminal/3"]
"Liminal 4" [href="/liminal/4"]
"Liminal 5" [href="/liminal/5"]
"Liminal 6" [href="/liminal/6"]
"Liminal 7" [href="/liminal/7"]
"Liminal 8" [href="/liminal/8"]
"Liminal 1" -> "Liminal 2" -> "Liminal 3" -> "Liminal 4" ->
"Liminal 5" -> "Liminal 6" -> "Liminal 7" -> "Liminal 8"
node[group="mania",style="filled",fillcolor="#000000",fontcolor="#dddddd"]
"Manic notes 1" [href="/mania/"]
"Manic notes 2" [href="/mania/2"]
@ -203,42 +240,12 @@ digraph Map {
"Agony and Ecstasy" -> "Video"
"Agony and Ecstasy" -> "Text"
node[group="poly",style="",fontcolor="#111111"]
"Poly 1" [href="/poly"]
"Poly 2" [href="/poly/2"]
"Poly 3" [href="/poly/3"]
"Poly 4" [href="/poly/4"]
"Poly 5" [href="/poly/5"]
"Poly 6" [href="/poly/6"]
"Poly 1" -> "Poly 2" -> "Poly 3" -> "Poly 4" -> "Poly 5" -> "Poly 6"
node[group="sh",style="filled",fillcolor="#222228",fontcolor="#dddddd"]
"Self-harm 1" [href="/self-harm"]
"Self-harm 2" [href="/self-harm/2"]
"Self-harm 3" [href="/self-harm/3"]
"Self-harm 1" -> "Self-harm 2" -> "Self-harm 3"
node[group="sex",style="",fontcolor="#111111"]
"Sex 1" [href="/sex"]
"Sex 2" [href="/sex/2"]
"Sex 3" [href="/sex/3"]
"Sex 4" [href="/sex/4"]
"Sex 1" -> "Sex 2" -> "Sex 3" -> "Sex 4"
node[group="kink"]
"Kink 1" [href="/sex/kink"]
node[group="software",style="filled",fillcolor="#eaf5ff",fontcolor="#05264c"]
"Software 1" [href="https://github.com/makyo/ally/pull/4/commits/c7d73fc7a727d34728b353a2c428b0da71788bf0"]
"Software 2" [href="https://github.com/makyo/ally/pull/4/commits/04b7300615386bccbb331caebcf396077f6fc9ea"]
"Software 3" [href="https://github.com/makyo/ally/pull/4/commits/d73e63f3fdc0bce89f06334959ade28888a2f7b2"]
"Software 4" [href="https://github.com/makyo/ally/pull/4/commits/90acc199cd80944f6c5eb6834a2fa67783db4d7d"]
"Software 5" [href="https://github.com/makyo/ally/pull/4/commits/49f83b2148f70151c43f8ef77a061e7252d9b1d4"]
"Software 6" [href="https://github.com/makyo/ally/pull/4/commits/ab8302ca2f6ca00c0a5bdfebcb4b2f2291ec9833"]
"Software 1" -> "Software 2" -> "Software 3" -> "Software 4" ->
"Software 5" -> "Software 6"
node[group="transition"]
node[group="writing",style="",fontcolor="#111111"]

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 127 KiB

248
static/sex/kink/bingo.svg Normal file
View File

@ -0,0 +1,248 @@
<?xml version="1.0" standalone="yes"?>
<svg width="505" height="555" viewbox="0 0 505 555" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<style>
@import url('https://fonts.googleapis.com/css?family=Nunito');
.bbbingo-card rect.background {
fill: #223;
stroke-width: 0px;
}
.bbbingo-card text {
font-family: "Nunito", sans-serif;
fill: #dcd;
}
.bbbingo-card text.title {
font-size: 45px;
font-style: italic;
}
.bbbingo-card tspan.paler {
fill: #656;
}
.bbbingo-card tspan.pale {
fill: #989;
}
.bbbingo-card rect {
fill: none;
stroke: #bab;
stroke-width: 5px;
}
.bbbingo-card rect.selected {
fill: #445;
stroke: #fef;
}
.bbbingo-card path {
fill: #656;
opacity: 0.5;
}
.bbbingo-card text.freespace {
font-size: 10pt;
opacity: 0.5;
}
.bbbingo-card .text g text {
font-size: 12px;
}
.bbbingo-card a, a:visited, a:active, a:hover {
fill: #dcd;
text-decoration: underline;
}
.bbbingo-card rect.target {
fill: transparent;
stroke: none;
}
.bbbingo-card circle.play_marker {
display: none;
}
.bbbingo-card circle.marked {
display: block;
fill: #f8b;
opacity: 0.4;
}
</style>
<g class="bbbingo-card" transform="translate(2.5, 2.25)">
<rect class="background" x="-2.5" y="-2.5" width="507.5" height="557.5" />
<text class="title" x="0" y="0" dominant-baseline="hanging">
<tspan class="paler">b</tspan>
<tspan class="pale">b</tspan>
b
i
n
g
o
</text>
<text class="name" x="500" y="0" dominant-baseline="hanging" text-anchor="end"><a xlink:href="/preparations-squadrons-voices-spans" target="_blank">Kink Bingo (Maddy)</a> (0)</text>
<text class="author" x="500" y="20px" dominant-baseline="hanging" text-anchor="end">by <a xlink:href="/~makyo">makyo</a></text>
<g transform="translate(0, 50)">
<rect x="0" y="0" width="100" height="100" class="slot_0" />
<rect x="100" y="0" width="100" height="100" class="slot_1" />
<rect x="200" y="0" width="100" height="100" class="slot_2" />
<rect x="300" y="0" width="100" height="100" class="slot_3" />
<rect x="400" y="0" width="100" height="100" class="slot_4" />
<rect x="0" y="100" width="100" height="100" class="slot_5" />
<rect x="100" y="100" width="100" height="100" class="slot_6" />
<rect x="200" y="100" width="100" height="100" class="slot_7" />
<rect x="300" y="100" width="100" height="100" class="slot_8" />
<rect x="400" y="100" width="100" height="100" class="slot_9" />
<rect x="0" y="200" width="100" height="100" class="slot_10" />
<rect x="100" y="200" width="100" height="100" class="slot_11" />
<rect x="200" y="200" width="100" height="100" class="slot_12" />
<rect x="300" y="200" width="100" height="100" class="slot_13" />
<rect x="400" y="200" width="100" height="100" class="slot_14" />
<rect x="0" y="300" width="100" height="100" class="slot_15" />
<rect x="100" y="300" width="100" height="100" class="slot_16" />
<rect x="200" y="300" width="100" height="100" class="slot_17" />
<rect x="300" y="300" width="100" height="100" class="slot_18" />
<rect x="400" y="300" width="100" height="100" class="slot_19" />
<rect x="0" y="400" width="100" height="100" class="slot_20" />
<rect x="100" y="400" width="100" height="100" class="slot_21" />
<rect x="200" y="400" width="100" height="100" class="slot_22" />
<rect x="300" y="400" width="100" height="100" class="slot_23" />
<rect x="400" y="400" width="100" height="100" class="slot_24" />
<path d="M 202.5 242.5 l 40 -40 l -40 0 z" />
<text class="freespace" transform="rotate(-45) translate(-12.5, 310)">Free</text>
<g class="text">
<g transform="translate(0, 0)">
<text x="50" y="53" text-anchor="middle">Degradation</text>
<circle cx="50" cy="50" r="35" class="play_marker play_0" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="0" />
</g>
<g transform="translate(100, 0)">
<text x="50" y="53" text-anchor="middle">Scent marking</text>
<circle cx="50" cy="50" r="35" class="play_marker play_1" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="1" />
</g>
<g transform="translate(200, 0)">
<text x="50" y="53" text-anchor="middle">Breeding</text>
<circle cx="50" cy="50" r="35" class="play_marker play_2" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="2" />
</g>
<g transform="translate(300, 0)">
<text x="50" y="53" text-anchor="middle">Non-consensual</text>
<circle cx="50" cy="50" r="35" class="play_marker play_3" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="3" />
</g>
<g transform="translate(400, 0)">
<text x="50" y="45" text-anchor="middle">Risk of</text><text x="50" y="60" text-anchor="middle">pregnancy</text>
<circle cx="50" cy="50" r="35" class="play_marker play_4" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="4" />
</g>
<g transform="translate(0, 100)">
<text x="50" y="53" text-anchor="middle">Scruff biting</text>
<circle cx="50" cy="50" r="35" class="play_marker play_5" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="5" />
</g>
<g transform="translate(100, 100)">
<text x="50" y="45" text-anchor="middle">Leash or collar</text><text x="50" y="60" text-anchor="middle">pulling</text>
<circle cx="50" cy="50" r="35" class="play_marker play_6" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="6" />
</g>
<g transform="translate(200, 100)">
<text x="50" y="53" text-anchor="middle">Teasing</text>
<circle cx="50" cy="50" r="35" class="play_marker play_7" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="7" />
</g>
<g transform="translate(300, 100)">
<text x="50" y="38" text-anchor="middle">Exhibitionism</text><text x="50" y="53" text-anchor="middle">(primarily</text><text x="50" y="68" text-anchor="middle">public sex)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_8" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="8" />
</g>
<g transform="translate(400, 100)">
<text x="50" y="30" text-anchor="middle">Identity</text><text x="50" y="45" text-anchor="middle">(gender,</text><text x="50" y="60" text-anchor="middle">species, etc)</text><text x="50" y="75" text-anchor="middle">denial</text>
<circle cx="50" cy="50" r="35" class="play_marker play_9" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="9" />
</g>
<g transform="translate(0, 200)">
<text x="50" y="53" text-anchor="middle">Heat/estrus</text>
<circle cx="50" cy="50" r="35" class="play_marker play_10" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="10" />
</g>
<g transform="translate(100, 200)">
<text x="50" y="53" text-anchor="middle">Breath control</text>
<circle cx="50" cy="50" r="35" class="play_marker play_11" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="11" />
</g>
<g transform="translate(200, 200)">
<text x="50" y="53" text-anchor="middle">Humiliation</text>
<circle cx="50" cy="50" r="35" class="play_marker play_12" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="12" />
</g>
<g transform="translate(300, 200)">
<text x="50" y="53" text-anchor="middle">Knotting/tying</text>
<circle cx="50" cy="50" r="35" class="play_marker play_13" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="13" />
</g>
<g transform="translate(400, 200)">
<text x="50" y="30" text-anchor="middle">Ear play</text><text x="50" y="45" text-anchor="middle">(teasing,</text><text x="50" y="60" text-anchor="middle">pulling,</text><text x="50" y="75" text-anchor="middle">biting, etc)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_14" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="14" />
</g>
<g transform="translate(0, 300)">
<text x="50" y="38" text-anchor="middle">Discipline</text><text x="50" y="53" text-anchor="middle">or</text><text x="50" y="68" text-anchor="middle">reinforcement</text>
<circle cx="50" cy="50" r="35" class="play_marker play_15" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="15" />
</g>
<g transform="translate(100, 300)">
<text x="50" y="23" text-anchor="middle">Weakened mental</text><text x="50" y="38" text-anchor="middle">state (hypno,</text><text x="50" y="53" text-anchor="middle">drugs, estrus,</text><text x="50" y="68" text-anchor="middle">exhaustion,</text><text x="50" y="83" text-anchor="middle">etc)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_16" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="16" />
</g>
<g transform="translate(200, 300)">
<text x="50" y="53" text-anchor="middle">Master/pet</text>
<circle cx="50" cy="50" r="35" class="play_marker play_17" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="17" />
</g>
<g transform="translate(300, 300)">
<text x="50" y="45" text-anchor="middle">Humiliating</text><text x="50" y="60" text-anchor="middle">instructions</text>
<circle cx="50" cy="50" r="35" class="play_marker play_18" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="18" />
</g>
<g transform="translate(400, 300)">
<text x="50" y="45" text-anchor="middle">Speech</text><text x="50" y="60" text-anchor="middle">restrictions</text>
<circle cx="50" cy="50" r="35" class="play_marker play_19" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="19" />
</g>
<g transform="translate(0, 400)">
<text x="50" y="38" text-anchor="middle">Pain/blood</text><text x="50" y="53" text-anchor="middle">(accidental</text><text x="50" y="68" text-anchor="middle">or intentional)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_20" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="20" />
</g>
<g transform="translate(100, 400)">
<text x="50" y="45" text-anchor="middle">Orgasm or</text><text x="50" y="60" text-anchor="middle">pleasure denial</text>
<circle cx="50" cy="50" r="35" class="play_marker play_21" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="21" />
</g>
<g transform="translate(200, 400)">
<text x="50" y="15" text-anchor="middle">Clothes</text><text x="50" y="30" text-anchor="middle">(bulges, cum</text><text x="50" y="45" text-anchor="middle">stains on</text><text x="50" y="60" text-anchor="middle">clothes,</text><text x="50" y="75" text-anchor="middle">clothed sex,</text><text x="50" y="90" text-anchor="middle">etc)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_22" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="22" />
</g>
<g transform="translate(300, 400)">
<text x="50" y="23" text-anchor="middle">Post-sex</text><text x="50" y="38" text-anchor="middle">degradation</text><text x="50" y="53" text-anchor="middle">(public</text><text x="50" y="68" text-anchor="middle">parading,</text><text x="50" y="83" text-anchor="middle">etc)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_23" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="23" />
</g>
<g transform="translate(400, 400)">
<text x="50" y="53" text-anchor="middle">Coercion</text>
<circle cx="50" cy="50" r="35" class="play_marker play_24" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="24" />
</g>
</g>
<path d="M 202.5 242.5 l 40 -40 l -40 0 z" />
<text class="freespace" transform="rotate(-45) translate(-12.5, 310)">Free</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1,5 +1,9 @@
<footer>
<p>&copy; Madison Scott-Clary, 2019 &bull; <a href="/about">About</a> &bull; <a href="/news">Updates</a> &bull; <a href="/map">Map</a></p>
<p>&copy; Madison Scott-Clary, 2019
&bull; <a href="/about">About</a>
&bull; <a href="/news">Updates</a>
&bull; <a href="/map">Map</a>
&bull; <a href="/chronology">Chronology</a></p>
</footer>
<!-- Matomo -->

View File

@ -116,6 +116,17 @@ blockquote em {
font-weight: bold;
font-family: 'Merriweather Sans', sans-serif;
}
.info {
color: #008;
text-align: right;
}
.info:before {
content: 'ⓘ';
display: block;
font-size: 32pt;
font-weight: bold;
font-family: 'Merriweather Sans', sans-serif;
}
pre {
border: 1px solid #eee;
padding: 1em;